mod_rewrite“400 Bad Request”问题

时间:2011-05-24 02:05:31

标签: mod-rewrite

设置mod_rewrite时,我似乎无法通过错误请求错误。我已经尝试了一段时间,所以这就是我所拥有的。

我想要访问的网址是:

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]

我使用了正则表达式工具和this tool,但无论我最终得到的是一个页面如何:

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)

2 个答案:

答案 0 :(得分:82)

如果有人发现自己,我的问题是在替换之前缺少前导斜线。

RewriteRule ([^/]+)/?$ index.php?page=$1 [L]

应该是

RewriteRule ([^/]+)/?$ /index.php?page=$1 [L]

... GRRRR

答案 1 :(得分:2)

如果您看到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 - 标记最后一条规则