2009-09-12 86 views
0

我是一個.htaccess n00b,不能爲我的生活得到正則表達式的句柄。mod_rewrite重定向規則變量問題

我有下面這段RewriteRule代碼工作得很好:

RewriteRule ^logo/?$ /pages/logo.html 

基本上,它需要/pages/logo.html並使其/logo

有沒有一種方法可以讓我將這些代碼概括爲變量,這樣它就可以自動工作,而不必爲每個頁面設置獨立的行?

我知道$1可以作爲一個變量,但通常用於查詢,我不能讓它在這種情況下工作。

回答

1

首先,你需要知道的mod_rewrite只能處理請求到服務器。因此,您需要請求/logo將其重寫爲/pages/logo.html。這就是規則的作用,它將內部URL路徑/logo的請求重寫爲/pages/logo.html,反之亦然。

如果你現在想使用匹配的字符串的部分,你需要使用組他們,你則可以參考與$n組((expr))。你的情況格局[^/]將是合適的描述比斜線/以外的任何字符:

RewriteRule ^([^/]+)$ /pages/$1.html 
+0

我是得到它,這樣它並不適用於PHP文件在我的服務器上掙扎的唯一件事不受此重寫。 我最終與 RewriteCond%{REQUEST_FILENAME}!^。* \。php $ – Yahel 2009-09-12 15:00:00

+0

您也可以使用'RewriteCond%{REQUEST_FILENAME}!-f'來排除任何現有的常規文件。 – Gumbo 2009-09-12 22:41:26

1

試試這個:

RewriteRule ^/pages/(.*)\.html$ /$1 

(.*)匹配pages/.html之間的任何東西。無論它匹配什麼,都可以在$1中使用。所以,/pages/logo.html變得/logo/pages/subdir/other_page.html將成爲/subdir/other_page