【问题标题】:mod_rewrite "400 Bad Request" problemmod_rewrite "400 Bad Request" 问题
【发布时间】:2011-08-31 14:13:04
【问题描述】:

在设置 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]

我使用了一个正则表达式工具和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

另外,我的访问、错误或重写日志中没有任何信息。

编辑:我的重写规则在我的虚拟主机文件中。 (/etc/apache2/sites-available/gordons.local)

【问题讨论】:

  • 你可以在禁用 mod_rewrite 的情况下直接访问 index.php 吗?

标签: mod-rewrite


【解决方案1】:

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

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

应该是

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

咕噜……

【讨论】:

  • 它闻到了缺少斜线的味道
  • 您返回这里并添加此解决方案的努力使我免于精神错乱。谢谢
【解决方案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 - 标记为最后一条规则

【讨论】:

  • 我在我的 vhosts 文件中有这些设置,这是一个糟糕的地方吗? RewriteLog 是在我重新启动 apache 时自动创建的,它为所有用户设置了 rwx 权限。感谢您的负面展望提示,我计划在第一个工作正常后添加规则。
  • vhosts 可能是正确的地方。尝试按照我的建议更改 RewriteRule,然后跟踪 apache error.log。
  • 您提供的规则不起作用,但它帮助我注意到替换模式之前缺少的 / 。也许需要它,因为我在 vhosts 文件而不是 htaccess 文件中有重写规则。谢谢。 (+1)
  • 这真的很奇怪,因为我在发布之前在我的 .htaccess 中正确测试了解决方案。当在 vhosts 和 .htaccess 中放置相同的规则时,Apache 的行为可能会有所不同。很高兴你最终让它工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多