我为/ home / lukasz / sites
中的所有目录创建了一个动态vhost文件<VirtualHost *:80>
ServerName vm01.dev
ServerAlias *.vm01.dev
SetEnv APPLICATION_ENV "lukasz"
VirtualDocumentRoot /home/lukasz/websites/%1/public
<directory /home/lukasz/websites/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</directory>
</VirtualHost>
直到mod_rewrite的非常简单的规则开始发挥作用。如果我将以下代码添加到.htacesss
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
apache服务器将无法响应。它将进入一个无限循环,并将在10次重定向后从执行中突破。这个问题与我正在使用的VirtualDocumentRoot密切相关。我应该如何修改我的配置以使其保持动态并使用htaccess来阻止它?
答案 0 :(得分:0)
我猜你要将 index.php 设为默认页面,当请求的资源不存在时,你没有说。
如果是这种情况,那么在 virtualHost 中添加 ErrorDocument 条目就足够了。
ErrorDocument 404 /index.php
如果要使用mod_rewrite,将规则放在Virtualhost定义中比在.htaccess文件中放置效率要高得多。由于 httpd.conf 在启动时被读取并且所有规则都被编译,而不是正在读取.htaccess文件并且为每个请求解析所有规则。无论如何,以下应该停止循环:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
假设您有: /index.php
仅供参考:如果您不清楚上述规则的作用,或者您想要更抽象的内容,请考虑以下{{3},请阅读Apache mod_rewrite文档。 }}。