[英]Infinite loop with mod_rewrite and vhost_alias
我為/ 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來阻止它?
我猜你想讓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
僅供參考:如果您不清楚上述規則的作用,或者如果您想要更抽象的內容,請考慮以下帖子 ,那么Apache mod_rewrite文檔值得一讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.