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