htaccess将多个文件重写为root

时间:2013-04-21 16:41:34

标签: .htaccess mod-rewrite rewrite

我在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]

任何帮助都将不胜感激。

1 个答案:

答案 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.phpuser.php,css,javascript或图像文件。