2011-05-26 130 views
0

我試圖美化一些網址。我配置了htaccess,因此我的網址被改變:.htaccess重定向301使用重寫規則

舊網址:http://mysite.com/index.php?id=45tye4 新網址:http://mysite.com/45tye4

我想現在舊網址永久重定向到新的URL。這是我嘗試沒有運氣:

RewriteRule ^index.php?id=(.*)$ $1 [R=301,L] 

主要問題似乎是'?'在網址中。當我嘗試不使用相同的網址時?重定向工作。我也試過,沒有運氣其他變體:

RewriteRule ^index.php\?id=(.*)$ $1 [R=301,L] 
RewriteRule ^index.php[\?]id=(.*)$ $1 [R=301,L] 

更新:

我根據anubhava說明添加的重定向。重定向的工作原理,但不幸的是我進入了一個重定向循環。我認爲[L]標誌應該解決重定向循環,但它不。

RewriteCond %{QUERY_STRING} ^id=(.*)$ 
RewriteRule ^index\.php/?$ /%1? [R=301,L] 

RewriteRule ^(.*)$ index.php?id=$1 [L] 

回答

1

RewriteRule只匹配REQUEST_URI。你必須使用的RewriteCond來

匹配查詢字符串試試這個代碼:

Options +FollowSymlinks -MultiViews 
RewriteEngine on 

RewriteCond %{THE_REQUEST} ^GET\s/+index\.php [NC] 
RewriteCond %{QUERY_STRING} (^|&|\?)id=(.*)(&|$) [NC] 
RewriteRule . /%2? [R=301,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ index.php?id=$1 [L] 

這將重定向老的URI /index.php?id=45tye4到新的URI:/45tye4

+0

的重定向工作,但不幸的是我進入一個重定向循環。我認爲[L]標誌應該解決重定向循環,但它不。 – adiian 2011-05-26 21:45:17

+0

有一個小小的錯字,編輯了答案。請再檢查一次。 – anubhava 2011-05-26 22:04:22

+0

我添加了更新後的一個,仍然收到重定向循環問題。我不明白,不應該[L]國旗避免它? – adiian 2011-05-26 22:10:58