[英]How to change the name of the directory in url in php using htaccess?
如何将我的网站的网址名称更改为:www.example.com/user/panel.php更改为www.example.com/username/panel.php,其中“用户名”对于每个用户都是唯一的,并且对于每个登录名都是jsfiddle.net中数据库中用户的名称,他们可以帮我吗?
我个人不会为此使用.htaccess(特别是)
那说大多数时候人们都是这样
RewriteEngine On
RewriteRule ^users/([-a-zA-Z0-9_]+)/?$ index.php?user=$1 [L]
因此,如果您的网址像
www.yoursite.com/users/someguy
然后将其传递给apache(和php)作为
www.yoursite.com/index.php?user=someguy
然后在PHP中,您可以只使用$_GET[user]
来访问它。
现在忽略我可能存在的安全性问题(您不应该依赖用户输入来告诉他们是谁,他们可以撒谎),为此,我将使用所谓的URI方法(不是URL),URI是一个假想的路径。 这也是许多MVC系统采用的方法。 因此,我将从URI开始
www.yoursite.com/index.php/users/someguy
注意index.php在哪里(在中间)。 然后你像这样做一个.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f #if not a real file
RewriteCond %{REQUEST_FILENAME} !-d #if not a real folder
RewriteRule ^(.*)$ index.php/$1 [L] #hide the index.php
因此,这样做是允许您删除index.php
并为您提供这样的网址
www.yoursite.com/users/someguy
这就是我们想要的,并且看起来与第一种情况基本相同。
然后,您可以使用$_SERVER['QUERY_STRING']
全局晚餐,它将提供index.php之后的所有内容
/users/someguy
您可以将其拆分,路由到某个地方,或使用它做任何需要的事情。 像这样
$uri = array_filter( explode('/', $_SERVER['QUERY_STRING'] ) );
//$uri = [ 'users', 'someguy' ];
现在,我更喜欢它的原因是它更灵活,它使您可以将查询字符串的url的?var
部分用作其他内容。 (例如可收藏书签的搜索表单),即 因为您没有破坏GET Request的查询参数,所以感觉不太hack。 相反,使用第一种方法,如果您的.htaccess太松散,则可以使它成为URL的查询部分在您的站点上不可用,这对我来说感觉不对。
它也更易于维护,因为它不需要为其他漂亮的URL进行进一步的设置
例如:说您要漂亮的产品。 使用第一种方法,您将不得不回到.htaccess
,再在其中添加至少一条规则:
RewriteEngine On
RewriteRule ^users/([-a-zA-Z0-9_]+)/?$ index.php?user=$1 [L]
RewriteRule ^products/(0-9_]+)/?$ index.php?product=$1 [L]
如果您具有产品类别,则可能甚至更复杂的级别
RewriteRule ^produts/([-a-zA-Z0-9_]+)/(0-9_]+)/?$ index.php?category=$1&product_id=$2 [L]
经过一番讨价还价之后,您会发现其中有数十条规则,其中一些规则可能尚不清楚它们的作用。 然后,您意识到您将products
拼写为produts
,必须开始重命名。 后来只是一团糟。
现在,使用第二种方法,除了在索引页面中进行路由之外,您无需执行任何其他步骤。 您只需输入网址
www.yoursite.com/products/123
并从$_SERVER
数组中拉出这些东西,而不会进一步破坏重写规则。
这是我以前做过的回答,概述了如何构建基本路由器。
说得通。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.