500服务器错误:Apache 2.2.x中的无限重写循环,带有mod_vhost_alias,VirtualDocumentRoot和mod_rewrite,用于路由/“漂亮”URL

时间:2009-06-22 15:20:40

标签: mod-rewrite apache2

我遇到了一个问题,使用Apache的mod_vhost_alias指令和mod_rewrite来使用本地开发机器来路由“漂亮的URL”。我知道可以这样做,因为我的托管服务提供商使用类似的配置并且没有问题。但是,每当我尝试使用本地计算机时,A​​pache都会返回500内部服务器错误,并且日志表明内部重定向过多。

通常完成

在将域添加到本地计算机以进行开发时,我通常会遵循一个简单的传统过程:

  • 根据域名/path/to/www/创建一个目录,即:/path/to/www/example.local/
  • /etc/hosts添加新域名条目,即:127.0.0.1 example.local
  • 为新域添加VirtualHost指令,DocumentRoot设置为/path/to/www/example.local/pub/
  • 重启Apache

问题

我最近开始使用VirtualDocumentRoot提供的mod_vhost_alias指令来清理我不断增长的VirtualHost指令列表,并省去了在每个新域之后重启Apache的麻烦: / p>

CanonicalName Off
VirtualDocumentRoot /path/to/www/%0/pub/

在其中一个域中,比如example.local,我可能会有以下内容:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule .* index.php/%0 [L]

这是大多数现代应用程序和框架的典型“漂亮URL”/路由模式。但是,当我尝试在浏览器中加载example.local/anything/that/should/work时,Apache会进入无限重定向循环。

我启用RewriteLog来确定发生了什么,并发现Apache正在执行以下操作:

  • 从网址
  • 中删除目录前缀(/path/to/www/example.local/pub/
  • 按预期正常处理RewriteRules,生成/index.php/anything/that/should/work
  • 再次添加目录前缀,产生:/path/to/www/example.local/pub/index.php/anything/that/should/work
  • 重新开始。 (!?!?)

问题

有没有其他人看过这种行为并为此制定了修复程序?或者,有人可能会在我的Apache配置中看到一个我可能会丢失的明显错误吗?

2 个答案:

答案 0 :(得分:4)

尝试使用RewriteBase,我遇到了同样的问题,它对我有用。 祝你好运。

答案 1 :(得分:0)

您是否尝试将NS标志添加到RewriteRule:

RewriteRule .* index.php/%0 [L,NS]