2010-07-28 110 views
0

我在.htaccess中有URL重寫問題。下面是.htaccess文件:.htaccess問題 - URL重寫

RewriteEngine On 
RewriteBase /community/ 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^view-all-results$ forums/index.php?view=view-all-results [R=302] 
RewriteRule ^view-all-results/$ forums/index.php?view=view-all-results [R=302] 

我需要重寫URL,如 「/community/view-all-results?u=2」 到 「community/forums/index.php?view=view-all-results&u=2」。 但根據上述規則,我會得到「community/forums/index.php?view=view-all-results」。

我試圖重寫規則更改爲

RewriteRule ^view-all-results?(.*)$ forums/index.php?view=view-all-results&$1 [R=302] 

但它不能正常工作。它仍將URL重寫爲「community/forums/index.php?view=view-all-results」。

當我改變規則(放+而不是*):

RewriteRule ^view-all-results?(.+)$ forums/index.php?view=view-all-results&$1 [R=302] 

我有網址,如 「community/forums/index.php?view=view-all-results&s」。所以我不理解這種行爲。((

,我將不勝感激的任何建議。

回答

2

神奇的標誌是in the docs: [QSA],將原有的查詢字符串添加到您的網址。

標準匹配只在路徑上完成,而不是在查詢結束時,你可以在魔術變量%{QUERY_STRING}中找到)匹配這個變量可以在RewriteCond條件下完成,也可以將這個變量追加到結果url中,但QSA無限多userfriendely here。

2

試試這個...

RewriteEngine On 
RewriteBase /community/ 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^view-all-results/?$ forums/index.php?view=view-all-results [QSA] 

基本上是一個重寫規則的前半部分不匹配對QUERY_STRING,所以你第二個例子不會匹配反對。您的第一個代碼缺失的主要原因是QSA標誌,它告訴它通過它接收到的QUERY_STRING以及新創建的QUERY_STRING。我還刪除了R = 302,因爲我認爲你不希望URL改變。

編輯:哦,我還通過使尾部斜線可選組合規則。