繁体   English   中英

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

[英]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数组中拉出这些东西,而不会进一步破坏重写规则。

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

OOP PHP前端控制器问题

说得通。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM