mod_rewrite不会重写

时间:2011-02-23 01:25:33

标签: apache .htaccess mod-rewrite

我有以下代码:

RewriteEngine on
RewriteRule ^user/([a-z]+)$ index.php?Agent=$1 [QSA]

理论上我的网站的所有访问者都使用以下格式:

www.site.com/user/username

应该指向:

www.site.com/index.php?Agent=username
而是将它们视为/ user是真实目录,并且/ user / username是有效文件并且存在(它不存在)。有什么想法吗?

编辑#1

我稍微修改了我的htaccess甚至剥离了/ user要求,以下.htaccess文件导致500错误,即使仅访问主域名(www.site.com):

ErrorDocument 404 /404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^(.+)$ index.php?Agent=$1 [QSA]

3 个答案:

答案 0 :(得分:2)

  而是将它们视为/ user是真实目录,并且/ user / username是有效文件并且存在(它没有)。

你到底是什么意思?它显示了什么?

您想重写还是**重定向?

当用户输入www.site.com/user/username

时,重写=致电www.site.com/index.php?Agent=username

重定向=将用户重定向到其他网址,以便其地址字段显示为www.site.com/index.php?Agent=username

现在,您的代码应该重写,而不是重定向,这可能是您想要的。只是检查......

您的问题可能是您正在测试的用户名包含大写字母。添加NC以使匹配大小写不敏感。

RewriteRule ^user/([a-z]+)$ index.php?Agent=$1 [QSA,NC]

如果你想允许其他字符而不仅仅是字母a-z,你可以在字符类中添加更多字符,或者只写(.+)来匹配任何字符。

修改

根据下面的问题,我认为发生无限重定向是因为规则再次被触发(并且再次),因为重写与新的index.php请求匹配。只需检查重定向的目标不是文件就可以解决这个问题。 (-f =“is file”。!= negate condition。)

RewriteCond %{REQUEST_FILENAME} !-f

答案 1 :(得分:1)

它应该工作。我正在使用相当于我重写的确切行。这就是我所拥有的:

RewriteRule ^history/(.+)?$ history.php?display_name=$1 [QSA,L]

注意“L”标志,这意味着mod_rewrite应该在此时停止,并且不处理任何其他重写规则。在这之后你还有其他重写规则吗?

你把它放在.htaccess吗?确保它正在被处理。在那里放一些随机垃圾并加载页面。 Apache应该向您显示错误页面,抱怨服务器配置错误。如果没有,它甚至不会查看你的.htaccess文件。确保在您的apache配置中,“AllowOverride”设置为此文件所在目录的“FileInfo选项”。

答案 2 :(得分:0)

这是在黑暗中刺伤但我建议您重新检查Apache配置文件apache2.conf文件以确保mod_rewrite已启用。

寻找这样一条线: #LoadModule rewrite_module modules/mod_rewrite.so

并将其更改为: LoadModule rewrite_module modules/mod_rewrite.so

编辑:然后重新启动您的网络服务器以使更改生效!

希望这有帮助!