2012-07-26 117 views
1

我有:如何重寫URL和301重定向一起工作

RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L] 

指向page/([^/\.]+)/?index.php?page=$1

當我去page/([^/\.]+)/,我不希望看到的index.php

(從上面的實現)對於反向,當我去到index.php,我看一個可見的301重定向到page/([^/\.]+)/

如何在不造成無限循環的情況下執行此操作?還是僅依賴於規範標記?

更新:

我得到它發生在一個方向(從新到舊),而不是其他的(從舊到新)

RewriteRule ^([^/\.]+)-yum/?$ yum/?x=$1 [L] 
RewriteRule ^([^/\.]+)/([^/\.]+)-yum/?$ yum/?x=$2&y=$1 [L] 

回答

0

你需要做對%{THE_REQUEST}檢查變量,以便你改寫當實際的請求是index.php文件:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?page=([^&]+)([^\ ]*) 
RewriteRule ^/?index\.php$ /page/%1/?%2 [L,R=301] 

因此,如果瀏覽器請求http://yourdomain.com/index.php?page=qwe&someother=var

應該重定向到:http://yourdomain.com/page/qwe/?someother=var

+0

無法得到這個工作,它是否在兩個方向工作,當page/qwe /實際上映射到index.php – bcm 2012-07-30 05:12:35

+0

@bcm這隻有它有一個方向,當有人請求'index.php'時,你仍然需要你在另一個方向上工作的東西 – 2012-07-30 05:14:34

0

完整的解決方案在這裏:

RewriteCond %{QUERY_STRING} Variable=([A-Za-z]+)$ 
RewriteRule OldURL/$ /NewURL/%1? [L,R=301] 
RewriteRule ^NewUrl/([^/\.]+)$ MappedNewLocationFolder/?Variable=$1 [L] 

第一行:檢查(名稱及數量)參數如預期的那樣

第二行: Check bas參數(一個或多個)電子的路徑,這是OLDURL是正確的,301 NEWURL

第三行:地圖NEWURL實際位置,其中文件位於(在瀏覽器中未顯示)

(問號就在第二行的結尾去掉變量追加到NewUrl)