设置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)
答案 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]