2015-08-27 121 views
0

我最近更新了我的網站使用:的的.htaccess國防部重寫查詢字符串重定向到一個路徑

www.website.com/path/123456 

代替:

www.website.com/path/file.php?id=123456 

爲了不打破舊的鏈接/書籤,我想將舊的查詢字符串重定向到新的路徑。

我已經試過:

RewriteRule ^path/file.php?id=?$ /path/$1 [L,R] 

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] 
RewriteRule ^path/.* /path/$1 [R] 

RewriteCond %{REQUEST_URI} ^/path/$ [NC] 
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] 
RewriteRule .* /path/$1 [R] 

RewriteCond %{REQUEST_URI} ^/path/file.php$ [NC] 
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] 
RewriteRule .* /path/$1 [R] 

,並有一些變化,但沒有運氣。我如何設置我的.htaccess來執行此重定向?

回答

0

貌似問題是你的正則表達式是不是捕捉參數,像這樣:

RewriteRule ^path/file.php?id=(.*)$ /path/$1 [L,R] 

在正則表達式中使用括號來捕捉你想稍後引用,就像$1部分字符串。 .*將匹配任何東西。所以,如果你想捕捉數字,例如,你可以將它改爲(\d+)

+0

這並沒有爲我工作,沒有發生任何事情我剛剛訪問過的鏈接正常人一樣。 – sharf

0

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代碼:

RewriteEngine On 
RewriteBase/

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} /path/file\.php\?id=(\d+) [NC] 
RewriteRule^/path/%1? [R=302,L,NE] 

# internal forward from pretty URL to actual one 
RewriteRule ^path/(\d+)/?$ path/file.php?id=$1 [L,QSA,NC] 
+0

這不適合我,沒有任何事情發生,我只是像正常訪問鏈接。 – sharf

+0

.htaccess位於根(位於'/ path /'之上)。還有其他的規則,但我已經嘗試重新安排和刪除其他人,使其工作。 – sharf

+0

'/ path /'沒有自己的.htaccess,在應用程序的根目錄中只有一個。它確實有更多的規則。當刪除所有的規則,並用你給我的東西替換文件時,我得到一個404頁面,並且在這個服務器上沒有找到請求的URL /path/file.php.' – sharf