我在php
文件夹中使用/pages/
脚本进行了网站设置,并重写:
www.example.com/pages/settings.php
...到...
www.example.com/settings
使用此.htaccess
代码:
RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?action=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?action=$1 [QSA]
但我也希望用户个人资料也能重定向:
www.exmaple.com/user123
现在我不确定最好的方法是什么,因为我也有重定向到root的页面。
我有user.php
根据GET
中的url
变量提取用户数据:
(www.exmaple.com/pages/user.php?username=user123)
但我想知道是否可以使用htaccess
重写为root以及初始页面重写?
我曾尝试做过这样的事情,但我还没有让它正常工作:
RewriteRule ^([a-zA-Z0-9_-]+)$ /pages/user.php?username=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ /pages/user.php?username=$1 [QSA]
任何帮助都将不胜感激。
答案 0 :(得分:1)
首先,您无需复制规则。您可以在末尾使用/?
作为可选的斜杠
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?action=$1 [QSA]
与
相同RewriteRule ^([a-zA-Z0-9_-]+)/?$ /pages/user.php?username=$1 [QSA]
这些规则允许使用或不使用尾部斜杠的请求。
对于你的问题,我看不出你是如何做到这一点的,因为你想要将相同的字符串重写为两个不同的目标。如果没有前缀或唯一字符串区分用户和操作请求,则不能这样做。
您可以使用此规则重写/user/user123
RewriteRule ^user/([a-zA-Z0-9_-]+)/?$ /pages/user.php?username=$1 [L,QSA]
您必须将此规则放在操作规则之前,因为操作规则具有更一般的匹配模式。
我还会在行动规则前加上
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
以防止重写真实文件,例如index.php
,user.php
,css,javascript或图像文件。