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

时间:2017-07-27 23:01:36

标签: php .htaccess

如何更改我网站网址的名称:www.example.com/user/panel.php到www.example.com/username/panel.php,其中“用户名”是唯一的对于每个用户,每次登录都是来自数据库的用户名,就像在jsfiddle.net中一样,他们可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我个人不会使用.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' ];

现在我更喜欢这个的原因是,它更灵活,它允许你使用查询字符串{ur}的?var部分用于其他内容。 (如可收藏的搜索表单)即。感觉不那么hacky,因为你没有打破GET请求的查询参数。相反,使用第一种方法,如果您的.htaccess很草率,那么您可能会认为网站的查询部分在您的网站上无法使用,这对我来说感觉不对。

它也更容易维护,因为它不需要进一步设置额外的漂亮网址

例如: 假设你想要漂亮你的产品。使用第一种方法,您必须返回.htaccess添加至少1个以下规则:

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数组中提取这些东西,不再有重写规则。

以上是我之前的回答,概述了如何构建基本路由器。

Oop php front controller issue

有道理。