我有以下代码:
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是有效文件并且存在(它不存在)。有什么想法吗?
我稍微修改了我的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]
答案 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
编辑:然后重新启动您的网络服务器以使更改生效!
希望这有帮助!