2011-12-27 164 views
0

我有一個網址列表,如htaccess和URL重寫

http://www.mywebsite.com/page.php?genus=A_GENUS&species=A_SPECIES&id=12345

我想寫的.htaccess其永久重定向訪問這個網址的形式訪問以下網址的,

http://www.mywebsite.com/species/A_GENUS/A_SPECIES

有沒有可能做到這一點,而不必手動列出數據庫中的每個物種?

我試着去查看它,但是我的頭在WordPress-Custom-Post-Type域中,因此我的大腦無法正常工作。任何幫助將不勝感激。

編輯:澄清

目前我的.htaccess完全是空的。我正在重寫我的網站以使用全新的CMS和這種新的URL格式。舊的網址格式將不復存在,但所有信息仍將被使用。

我們在Google上很多物種的排名很高,我希望來自那裏的訪問者能夠查看他們需要的信息,而不管URL格式如何變化。

這些更改尚未發生(仍然使用沙盒環境用於新版本的站點),並且希望在新版本「上線」之前更改URL。

編輯2:新網站的.htaccess

新網站的.htaccess的內容是這樣的全部:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /sandboxfolder/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /sandboxfolder/index.php [L] 
</IfModule> 

# END WordPress 

編輯加爾的回答

RewriteEngine On 
RewriteBase /sandboxfolder/ 
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+) 
RewriteRule ^profile.php$ /species/%1/%2 [R=302] 

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /sandboxfolder/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /sandboxfolder/index.php [L] 
</IfModule> 
# END WordPress 

不知道我是否在那裏正確使用了RewriteBase,但它沒有出現功能有或沒有它。

問候,

+1

你的htaccess目前包含什麼?舊的網址是否仍然有效?新的url是否已經被重寫(內部)到舊的? – Gerben 2011-12-27 14:24:20

+0

對不起Gerben,我會相應地更新我的帖子。 – dunc 2011-12-27 14:27:37

+1

新CMS不會使用任何htaccess?在舊網站上創建鏈接時,url參數是否始終按此順序排列? – Gerben 2011-12-27 14:39:46

回答

1
RewriteEngine On 
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+) 
RewriteRule ^page.php$ /species/%1/%2? [L,R=302] 

這一個假設的查詢字符串參數的一個非常特定的順序。所以要警告。此外,它假定名稱只包含純字母,數字或破折號。

完成測試後,將302更改爲301。我使用了302,因爲301被瀏覽器積極緩存,因此調試非常困難。

編輯:您應該將此添加到您擁有的其他重寫規則之上,否則它將無法工作。

編輯2:在最後添加了一個?以刪除查詢字符串。並且L標誌阻止進一步執行。

+0

這在我的腦海中是有道理的,看起來很完美,我希望!我現在就放棄它。非常感謝您的幫助Gerben - 一旦我有了一場比賽,我會確保你得到正確的答案:) – dunc 2011-12-27 14:48:34

+1

嗨,再一次Garben。它確實有效,但它增加了有關URL的附加信息:'/ species/Parasphaerichthys/lineatus?genus = Parasphaerichthys&species = lineatus&id = 1565' – dunc 2011-12-27 15:01:06

+0

此外,當使用我的WordPress規則以上時,代碼似乎不起作用所有。這是因爲WordPress是否將所有不是「index.php」的文件重新寫入索引頁?儘管如此,我仍然按照您的指示將代碼放在這些規則之上,但WordPress規則仍然顯得優先。我會更新我的原始文章,向您展示我編寫.htaccess的方式,以防萬一錯誤。 – dunc 2011-12-27 15:15:20