我遇到了一个问题,使用Apache的mod_vhost_alias
指令和mod_rewrite
来使用本地开发机器来路由“漂亮的URL”。我知道可以这样做,因为我的托管服务提供商使用类似的配置并且没有问题。但是,每当我尝试使用本地计算机时,Apache都会返回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/
我最近开始使用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配置中看到一个我可能会丢失的明显错误吗?
答案 0 :(得分:4)
尝试使用RewriteBase,我遇到了同样的问题,它对我有用。 祝你好运。
答案 1 :(得分:0)
您是否尝试将NS标志添加到RewriteRule:
RewriteRule .* index.php/%0 [L,NS]