我有一個簡單的 .htaccessfile
DirectoryIndex index.php
RewriteEngine On
RewriteRule ^v4r.info/(.*)/(.*) v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]
我在 htaccess.madewithlove.com 中測驗了檔案,它給出了正確的結果,并且復制和粘貼結果完美無缺。(http://localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&page=board.list.php&ff=710;;;;;&startdate=2017-11-11)
但是 htaccess 在 localhost 上失敗并出現錯誤:
File does not exist:
/var/www/html/public_html/v4r.info/action-for-woman/board.list.php
測驗網址是
localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&page=board.list.php&ff=710;;;;;&startdate=2017-11-11
htaccess 處于活動狀態。(垃圾行給出“內部服務器錯誤”)
在另一個目錄中 htaccess 作業正常。
apache.conf 似乎沒問題(AllowOverride All)
添加:
htaccess 檔案不在基本目錄中,而是在 1. 子目錄 (v4r.info) 中。
v4r.info/NGOplus 中的 htaccess 與 NGOplus RewriteRule ^(. ?)/?$ index.php?page=$1 [L,QSA] 的符號鏈接 'action-for-woman' 一起起作用
在這里,apache 進行了“本地”重寫,即只是 URL 的最后一部分(我必須從 $_SERVER 中提取目錄名稱 'action-for-woman' ...)
uj5u.com熱心網友回復:
我的 .htaccess 檔案位于 v4r.info 目錄中,這不是根目錄。
在這種情況下,您的規則永遠不會匹配。該RewriteRule 模式匹配相對于包含該.htaccess檔案的目錄的 URL 路徑。
但無論如何,重寫不是遞回的 afaik。
是的,它在目錄背景關系中是“遞回的” (即。.htaccess)。因為重寫引擎反復“回圈”,直到 URL 不變地通過,或者您已明確設定END(Apache 2.4)。
請嘗試以下操作:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !index\.php$
RewriteRule ^([^/] )/([^/] )$ /v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]
對REDIRECT_STATUS環境變數的檢查是為了確保只有直接請求被重寫,而不是已經被重寫的請求。
然而,這種模式仍然過于通用,因為它匹配任何兩個路徑段。我放置了第二個檢查條件,index.php以便您可以/v4r.info/NGOplus/index.php直接請求(就像您在測驗中所做的那樣)。但是,可以通過使正則運算式更具體來避免這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/472442.html
