2010-12-17 147 views
0

好吧,自從我使用mod重寫以來,我已經有一段時間了,我之前創建了幾個mod重寫,並忘記了他們做了什麼,我在想這段代碼片段究竟做了什麼。有人可以儘可能詳細地瞭解片段的功能。謝謝!Mod重寫問題

這是我的mod重寫代碼。

RewriteRule ^/?sitemap.xml?$ sitemap.php [L,NC,QSA] 

回答

2

基本上,任何尋找sitemap.xml的東西都會傳遞給sitemap.php,但是沒有它向用戶顯示,也就是說,url不會爲用戶更改。下面是一些文檔:

Apache mod_rewrite Flags摘自:

RewriteRule pattern target [Flag1,Flag2,Flag3]

大號|最後

的[L]標誌使mod_rewrite的停止處理規則集。在大多數情況下,這意味着如果規則匹配,則不會處理更多規則。

如果您在.htaccess文件或部分中使用RewriteRule,重要的是要了解如何處理規則。這種簡化的形式是,一旦處理了規則,重寫的請求就會交還給URL分析引擎,以便處理它。有可能在處理重寫的請求時,可能會再次遇到.htaccess文件或段,因此規則集可能會從頭再次運行。最常見的情況是,如果其中一個規則導致重定向(無論是內部還是外部),則會導致請求過程重新開始。

因此,重要的是,如果您在這些上下文中使用RewriteRule指令,並採取明確步驟避免規則循環,並且不僅僅依靠[L]標誌來終止一系列規則的執行,如下所示。

這裏給出的例子將重寫任何對index.php的請求,將原始請求作爲查詢字符串參數提供給index.php,但是,如果請求已經用於index.php,則此規則將被跳過。

RewriteCond %{REQUEST_URI} !index\.phpRewriteRule ^(.*) index.php?req=$1 [L]

NC | NOCASE

使用[NC]標誌的使重寫規則以不區分大小寫的方式進行匹配。也就是說,它不關心在匹配的URI中字母是大寫還是小寫。

在下面的示例中,對圖像文件的任何請求都將被代理到您的專用圖像服務器。例如,匹配不區分大小寫,因此.jpg和.JPG文件都可以接受。

RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com $1 [P,NC]

QSA | qsappend

當更換URI包含查詢字符串,重寫規則的默認行爲是放棄現有的查詢字符串,並與新生成的更換。使用[QSA]標誌會導致查詢字符串被合併。

考慮以下規則:

RewriteRule /pages/(.+) /page.php?page=$1 [QSA]

隨着[QSA]標誌,用於/pages/123?one=two的請求將被映射到/page.php?page=123&one=two。如果沒有[QSA]標誌,那個相同的請求將被映射到/page.php?page=123 - 也就是說,現有的查詢字符串將被丟棄。

0

當「sitemap.xm」被請求時,請求將請求重定向到「sitemap.php」。 「L」表示離開(或跳過任何以下規則)

注意
QSA標誌與查詢字符串處理(新老結合)有關。我找不到關於NC的任何信息。

該參考文獻有full detail(Apache)。

+0

這是否會作爲搜索引擎的sitemap.xml傳遞? – HELP 2010-12-17 01:12:03

+0

只要sitemap.php沒有模仿正確的xml內容,調用者就不應該得到任何指示sitemap.xml不存在的跡象。 – frayser 2010-12-17 01:22:57