如何解决mod_rewrite“ 400错误请求”问题
| 设置mod_rewrite时,我似乎无法克服Bad Request错误。我已经尝试了一段时间,所以这就是我所拥有的。 我尝试访问的网址是:gordons.local/brewCalc
我想看的页面是
gordons.local/index.php?page=brewCalc
这是我的重写规则:
RewriteEngine on
RewriteLog /var/www/gordons.com/logs/rewrite.log
RewriteRule ([^/]+)/?$ index.php?page=$1 [L]
我已经使用了正则表达式工具和该工具,但是无论最后我看到的页面是什么:
Bad Request
Your browser sent a request that this server could not understand.
Additionally,a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.2.12 (Ubuntu) Server at gordons.local Port 80
另外,我在访问,错误或重写日志中也没有任何信息。
编辑:我的重写规则在我的vhost文件中。 (/etc/apache2/sites-available/gordons.local)
解决方法
万一有人发现自己在这里,我的问题是在更换前缺少斜杠。
RewriteRule ([^/]+)/?$ index.php?page=$1 [L]
本来应该
RewriteRule ([^/]+)/?$ /index.php?page=$1 [L]
r ...
,如果看到Apache的error.log,则可以看到实际的错误。您极有可能尝试将上述规则放在.htaccess文件中,而.htaccess文件中不允许使用RewriteLog
。同样,您的RewriteRule将重定向比您预期的更多。因此,如果您注释掉您的RewriteLog
并让RewriteRule像这样,那么它应该可以工作:
RewriteEngine On
RewriteBase /
# request is not for a file
RewriteCond %{REQUEST_FILENAME} !-f
# request is not for a directory
RewriteCond %{REQUEST_FILENAME} !-d
# forward to index.php
RewriteRule ^([^/]+)/?$ index.php?page=$1 [L,QSA,NC,NE]
NC-忽略案例比较
NE-不编码RHS URI
QSA-将现有查询字符串追加到新查询字符串中
L-标记为最后一条规则
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。