如何使用htaccess在php中更改url中的目录名?

如何使用htaccess在php中更改url中的目录名?,php,.htaccess,Php,.htaccess,如何将我的网站url的名称(即:www.example.com/user/panel.php)更改为www.example.com/username/panel.php,其中“用户名”对于每个用户都是唯一的,并且对于每个登录名,都是数据库中的用户名,就像在jsfiddle.net中一样,他们能帮助我吗?我个人不会为此使用.htaccess(特别是) 也就是说,大多数时候人们都是这样做的 RewriteEngine On RewriteRule ^users/([-a-zA-Z0-9_]+)/?$

如何将我的网站url的名称(即: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
然后它会将其作为

然后在PHP中,只需使用
$\u GET[user]
即可访问它

现在忽略我可能存在的安全问题(你不应该依靠用户输入来判断他们是谁,他们可能会撒谎),为此,我将使用我称之为URI方法(不是URL)的URI是一个虚构的路径。这也是许多MVC系统采用的方法。因此,我将从URI开始

 www.yoursite.com/index.php/users/someguy
<注意,索引xph.php(在中间)。然后,像这样做一个.tAccess

  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
  www.yoursite.com/users/someguy
这样做的目的是允许您删除
index.php
,从而获得如下url

  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
  www.yoursite.com/users/someguy
这就是我们想要的,看起来和第一个案例基本相同

然后您可以使用
$\u服务器['QUERY\u STRING']
superglobal,它将为您提供超过index.php的所有内容

   /users/someguy
你可以把它分开,放到某个地方,用它做任何你想做的事,就像这样

 $uri = array_filter( explode('/', $_SERVER['QUERY_STRING'] ) );

 //$uri = [ 'users', 'someguy' ];
现在我更喜欢它的原因是它更灵活,它允许您使用查询字符串(url的
?var
部分)来处理其他内容。(如可书签搜索表单)也就是说,因为你没有破坏GET请求的查询参数,所以感觉不那么粗糙。相反,使用第一种方法,如果你的.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
并从
$\u服务器
数组中提取这些内容,而无需进一步修改重写规则

这是我之前做的一个回答,概述了如何构建一个基本路由器


有意义。

这可能是以前问过的问题。你知道,或者回答了你的问题吗?