Mod rewrite 500服务器错误:Apache 2.2.x中的无限重写循环,带有mod“vhost”别名、VirtualDocumentRoot和mod“rewrite for routing/”;“漂亮”;网址

Mod rewrite 500服务器错误:Apache 2.2.x中的无限重写循环,带有mod“vhost”别名、VirtualDocumentRoot和mod“rewrite for routing/”;“漂亮”;网址,mod-rewrite,apache2,Mod Rewrite,Apache2,我在使用Apache的mod_vhost_alias指令和mod_rewrite使用本地开发机器路由“漂亮URL”时遇到了问题。我知道这样做是可能的,因为我的主机提供商使用类似的配置,没有问题。但是,每当我在本地机器上尝试时,Apache都会返回一个500内部服务器错误,日志表明内部重定向太多 正常完成 在将域添加到本地计算机进行开发时,我通常遵循一个简单的常规过程: 在/path/to/www/中创建一个根据域命名的目录,即:/path/to/www/example.local/ 在新域的/

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

正常完成 在将域添加到本地计算机进行开发时,我通常遵循一个简单的常规过程:

  • /path/to/www/
    中创建一个根据域命名的目录,即:
    /path/to/www/example.local/
  • 在新域的
    /etc/hosts
    中添加一个条目,即:
    127.0.0.1示例。local
  • 为新域添加
    VirtualHost
    指令,将
    DocumentRoot
    设置为
    /path/to/www/example.local/pub/
  • 重新启动Apache
问题 最近,我开始使用
mod_vhost\u alias
提供的
VirtualDocumentRoot
指令来清理不断增加的
VirtualHost
指令列表,省去了每次新域后重新启动Apache的麻烦:

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/anythis/that/should/work
时,Apache进入了一个无限重定向循环

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

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-l
RewriteRule .* index.php/%0 [L]
  • 从URL中删除目录前缀(
    /path/to/www/example.local/pub/
  • 按照预期正常处理重写规则,生成
    /index.php/anythis/that/should/work
  • 再次在目录前缀前面加上前缀,生成:
    /path/to/www/example.local/pub/index.php/anythis/should/work
  • 重新开始。(!?!?)
问题
有没有其他人见过这种行为并制定了解决方案?或者,有人能在我的Apache配置中看到我可能丢失的明显错误吗?

您是否尝试将NS标志添加到您的重写规则中:

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

您是否尝试将NS标志添加到您的重写规则:

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

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

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

我没有。然而,正如我在上面提到的,我的托管提供商使用此方法在共享环境中提供域,并且不需要额外的标志。不过,谢谢你的建议,我会试一试的。我没有。然而,正如我在上面提到的,我的托管提供商使用此方法在共享环境中提供域,并且不需要额外的标志。不过,谢谢你的建议,我会试一试。我还尝试过在我的一些RewriteRule块中添加“RewriteBase/”,但成功率参差不齐。它起到了一定的作用,但并不始终如一。我还尝试将“RewriteBase/”添加到我的一些RewriteRule块中,取得了喜忧参半的成功。它有点起作用,但并不始终如一。