Mod rewrite 500服务器错误:Apache 2.2.x中的无限重写循环,带有mod“vhost”别名、VirtualDocumentRoot和mod“rewrite for routing/”;“漂亮”;网址
我在使用Apache的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/ 在新域的/
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块中,取得了喜忧参半的成功。它有点起作用,但并不始终如一。