2013-12-18 163 views
0

我在我的htaccess文件中有以下內容,它需要一個類似於www.example.com/Page.php?id=About的URL並將其轉換爲www.example.com/about。唯一的問題是,當我在htaccess中設置Redirect 301s時,舊URL不會重定向到新的URL(我知道這是因爲你不應該在基本的Redirect 301中傳遞參數 - 基本重定向的例子,已經在下面嘗試過)。htaccess 301重定向URL參數

Redirect 301 /Page.php?id=About http://www.example.com/about 

問題是,新的URL不一定只是刪除當前的id並用小寫版本代替它。舉例來說,我也想:

Redirect 301 /Page.php?id=Example http://www.example.com/example-page 

我想保持重寫URL的當前功能,同時也希望將舊網址的任何訪問重定向到新的(即更新谷歌索引) 。訪問www.example.com/Page.php?id=目前仍然有效,但顯示的頁面沒有內容。

Options +FollowSymLinks 
RewriteEngine on 

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

RewriteRule ^([a-zA-Z0-9\-]+)/?$ Page.php?id=$1 
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2 
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2&tabid=$3 

回答

5

如果將此規則添加到.htaccess中,它應該執行重定向的工作。它會將?id = About添加到重定向到/ about。如果您運行的是2.4.0或更高版本,則可以添加QSD標誌以放棄重定向中的查詢字符串。

RewriteCond %{QUERY_STRING} ^id=About$ 
RewriteRule ^page.php /about [NC,R,L] 
+0

感謝您的建議。不幸的是,訪問http://www.example.com/Page.php?id=About雖然沒有重定向到http://www.example.com/about? –

+0

該規則適用於page.php,小寫字母p。我剛剛用NC標誌更新了答案,使規則不區分大小寫。現在它應該匹配page.php和Page.php –

+0

謝謝,幾乎在那裏,我得到:http://www.example.com/about?id=About現在。是否有可能在最後沒有?id = About? –