问题描述
|
设置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-标记为最后一条规则