1

我有一个站点设置,其中包含重写的文件夹中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

现在我不确定最好的方法是什么,因为我也有页面重定向到根目录。

我有一个user.php根据以下GET变量提取用户数据的方法url

(www.exmaple.com/pages/user.php?username=user123)

但我想知道这是否可以重写为 roothtaccess以及初始页面重写?

我试图做这样的事情,但我还没有让它正常工作:

RewriteRule ^([a-zA-Z0-9_-]+)$ /pages/user.php?username=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ /pages/user.php?username=$1 [QSA]

任何帮助,将不胜感激。

4

1 回答 1

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 或 image 文件被重写。

于 2013-04-21T16:50:08.110 回答