2014-06-27 47 views
0

我繼承了一個.htaccess文件有一個極其複雜的mod_rewrite的規則,大約有100行有很多重複的多是這樣的:使用變量來簡化在.htaccess文件中的mod_rewrite規則

RewriteCond %{REQUEST_URI} !^/(test|dev|((current|archive|all|2x|19|20|21|22|23|24|25|26|27)/([a-z]{2}|pt_br)))/favicon.ico 
RewriteCond %{REQUEST_URI} !^/(test|dev|((current|archive|all|2x|19|20|21|22|23|24|25|26|27)/([a-z]{2}|pt_br)))/robots.txt 
RewriteRule ^(test|dev|((current|archive|all|2x|19|20|21|22|23|24|25|26|27)/([a-z]{2}|pt_br)))/(.*) /index.php?title=$5 [L,QSA,S=1] 

(請注意,規則確實有細微的差異,但並不完全相同,但它們之間的組成部分是一致的。)

我想使用變量來使這些規則更易於維護,這可能嗎?這個僞示例的行很長:

# define variables 
versions=(current|archive|all|2x|19|20|21|22|23|24|25|26|27) 
languages=(current|archive|all|2x|19|20|21|22|23|24|25|26|27) 
# body of rules 
RewriteCond %{REQUEST_URI} !^/(test|dev|($versions/$languages))/favicon.ico 
RewriteCond %{REQUEST_URI} !^/(test|dev|($versions/$languages))/robots.txt 
RewriteRule ^(test|dev|($versions/$languages)/(.*) /index.php?title=$5 [L,QSA,S=1] 

回答

0

那麼你不能在這樣的變量中存儲部分正則表達式。

作爲一種變通方法,您可以設置ENV變量,如果這些條件都爲真:

RewriteRule (current|archive|all|2x|19|20|21|22|23|24|25|26|27) - [E=VERSION:$1] 

RewriteRule (current|archive|all|2x|19|20|21|22|23|24|25|26|27) - [E=LANG:$1] 

一旦做到這一點,你可以在你的規則在你的條件下使用這些環境變量是這樣的:

RewriteCond %{ENV:VERSION} .+ 

RewriteCond %{ENV:LANG} .+