簡體   English   中英

mod_rewrite和vhost_alias的無限循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM