2009-09-22 23 views
2

我在目錄上有old.htm和new.htm,每次有人訪問old.htm時需要加載file.php,並且每次訪問new時加載old.htm。 HTM。停止mod_rewrite規則匹配,循環執行

這裏是我的非工作規則:

RewriteRule ^old\.htm$ file.php?%{REQUEST_URI} [L] 
RewriteRule ^new\.htm$ old.htm [L] 

當old.htm被訪問,file.php被調用。當訪問new.htm時,old.htm再次被「訪問」,並將其重寫爲file.php。所以,最後,訪問new.php加載file.php,但我想停在old.htm。

任何想法?

這裏的RewriteLogLevel 3輸出,如果有幫助:

old.htm

[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/old.htm -> old.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'old.htm' 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] rewrite old.htm -> file.php?/arquivoweb/old.htm 
[rid#2006ee0/initial] (3) split uri=file.php?/arquivoweb/old.htm -> uri=file.php, args=/arquivoweb/old.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] add per-dir prefix: file.php -> D:/dev/www/estadao/arquivoweb/file.php 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] strip document_root prefix: D:/dev/www/estadao/arquivoweb/file.php -> /arquivoweb/file.php 
[rid#2006ee0/initial] (1) [per-dir D:/dev/www/estadao/arquivoweb/] internal redirect with /arquivoweb/file.php [INTERNAL REDIRECT] 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'file.php' 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#200fb20/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^new\.htm$' to uri 'file.php' 
[rid#200fb20/initial/redir#1] (1) [per-dir D:/dev/www/estadao/arquivoweb/] pass through D:/dev/www/estadao/arquivoweb/file.php 

new.htm

[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/new.htm -> new.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'new.htm' 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/new.htm -> new.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^new\.htm$' to uri 'new.htm' 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] rewrite new.htm -> old.htm 
[rid#2006ee0/initial] (3) [per-dir D:/dev/www/estadao/arquivoweb/] add per-dir prefix: old.htm -> D:/dev/www/estadao/arquivoweb/old.htm 
[rid#2006ee0/initial] (2) [per-dir D:/dev/www/estadao/arquivoweb/] strip document_root prefix: D:/dev/www/estadao/arquivoweb/old.htm -> /arquivoweb/old.htm 
[rid#2006ee0/initial] (1) [per-dir D:/dev/www/estadao/arquivoweb/] internal redirect with /arquivoweb/old.htm [INTERNAL REDIRECT] 
[rid#200fa90/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/old.htm -> old.htm 
[rid#200fa90/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'old.htm' 
[rid#200fa90/initial/redir#1] (2) [per-dir D:/dev/www/estadao/arquivoweb/] rewrite old.htm -> file.php?/arquivoweb/old.htm 
[rid#200fa90/initial/redir#1] (3) split uri=file.php?/arquivoweb/old.htm -> uri=file.php, args=/arquivoweb/old.htm 
[rid#200fa90/initial/redir#1] (3) [per-dir D:/dev/www/estadao/arquivoweb/] add per-dir prefix: file.php -> D:/dev/www/estadao/arquivoweb/file.php 
[rid#200fa90/initial/redir#1] (2) [per-dir D:/dev/www/estadao/arquivoweb/] strip document_root prefix: D:/dev/www/estadao/arquivoweb/file.php -> /arquivoweb/file.php 
[rid#200fa90/initial/redir#1] (1) [per-dir D:/dev/www/estadao/arquivoweb/] internal redirect with /arquivoweb/file.php [INTERNAL REDIRECT] 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^old\.htm$' to uri 'file.php' 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] strip per-dir prefix: D:/dev/www/estadao/arquivoweb/file.php -> file.php 
[rid#20e6c70/initial/redir#2] (3) [per-dir D:/dev/www/estadao/arquivoweb/] applying pattern '^new\.htm$' to uri 'file.php' 
[rid#20e6c70/initial/redir#2] (1) [per-dir D:/dev/www/estadao/arquivoweb/] pass through D:/dev/www/estadao/arquivoweb/file.php 

回答

0

嘗試另外檢查原請求的URL而不僅僅是當前URL:

RewriteCond %{THE_REQUEST} ^GET\ /old\.html 
RewriteRule ^old\.htm$ file.php?%{REQUEST_URI} [L] 
RewriteRule ^new\.htm$ old.htm [L] 
+0

經過對正則表達式的一些黑客攻擊之後,我得到了它的工作,謝謝:)順便說一下,你的答案沒有任何問題!我只需要在'^ GET \/arquivoweb/[az] +/[\ d] {4}/[az] +/not [\ d] {8} p [\ d] + \ .htm',但它的工作原理! – inerte 2009-09-22 22:38:01

0

不知道什麼是會與new.htm發生,因爲日誌似乎只對蓋old.htm的情況。但是,嘗試將NS標誌添加到old.htm重寫規則中,以防止它在PHP腳本引入後觸發子請求。

+0

嗨jbourque,我分開日誌顯示來自old.htm什麼和new.htm什麼。我已經嘗試在兩行中添加'NS',並且無法使其正常工作:(我認爲錯誤發生在內部重定向時使用/arquivoweb/old.htm [INTERNAL REDIRECT]'應該是內部重寫,也許吧?無論如何,謝謝:) – inerte 2009-09-22 18:54:35

+0

對不起,我認爲我很難記住重寫規則。你能用重定向來解決它,而不是重寫嗎?還是可以在文件系統級別修復它,從new.htm到old.htm建立一個符號鏈接,而不是重寫URI? – 2009-09-22 19:12:17

+0

嗨jbourque,我正在使用的實際重寫規則比原始問題上的簡化示例稍微複雜一點,這是我測試過的,不起作用的,但它是模擬我的最簡單形式試圖去做。有成千上萬的文件,每天有數十萬的訪問者:)我試圖避免重定向或使用php打開文件,只是堅持重寫。 – inerte 2009-09-22 19:27:34

相關問題