2012-09-12 132 views
2

我遷移我的網站到一個新的平臺&我想舊網址這樣的映射:
anecdotage.com/index.php?aid=13337
這樣:
anecdotage.com/文章/ 13336/
[請注意在ID中的偏移量]將URL映射與國防部重寫

我可以在apache的mod_rewrite中執行此操作。任何幫助感謝!

回答

0

您不能單獨做任何數學與mod_rewrite的,這意味着你可以對陣13337,做一些事情,以它來將其更改爲13336不採用某種'RewriteMap 1至外部減去一個數,但是這需要訪問任一服務器或vhost配置。

因此,在虛擬主機/服務器配置,你必須設置地圖:

RewriteMap subtract prg:/path/to/script/that/subtracts-by-one.sh 

subtracts-by-one.sh腳本需要一個數字作爲輸入,從中減去1,然後打印出結果。然後用它在重寫規則:

# to make sure we aren't clobbering legit requests 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} aid=([0-9]+) 
RewriteRule ^/?index.php$ /articles/${subtract:%1}/? [L] 

如果您沒有訪問重寫地圖,那麼你需要做硬盤的方式,並列舉所有的重寫:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} aid=12345 
RewriteRule ^/?index.php$ /articles/12344/? [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} aid=13337 
RewriteRule ^/?index.php$ /articles/13336/? [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} aid=19911 
RewriteRule ^/?index.php$ /articles/19910/? [L]