2009-05-04 58 views
0

如果我使用我的htaccess的文件以下類似的50倍:mod_rewrite如果你在整個地方使用表達式,你可以把它放在一個「變量」中嗎?

重寫規則^(BLA | BLO | BLI |藍光| bloi | bkdo | doid | boidi | woekj | dfpo8ds)/ $ /section_index.php? sectionurl = $ 1 [L]

是否可以將bla | blo | bli | blui | bkdo | doid | boidi | woekj | dfpo8ds放在變量中而不是在每行中再次使用它?如果是這樣,我該怎麼做?

+0

究竟是什麼問題?給我們一個例子,說明你如何看待一個變量來解決你的問題。 – Gumbo 2009-05-04 07:13:14

+0

問題是我在htaccess文件中多次使用該重寫代碼行。每次我必須再次寫出整個BL | blo | bl | blu | bkdo | doid | boidi | woekj | dfpo8ds。所以我想只是把它放在一個變量中,並開始執行此操作: RewriteRule ^(MVARIABLE)/?$ /section_index.php?sectionurl=$1 [L] – PeterV 2009-05-04 07:29:50

回答

1

你可以設置環境變量:

RewriteRule ^(bla|blo|bli|blu|bloi|bkdo|doid|boidi|woekj|dfpo8ds)/?$ /section_index.php?sectionurl=$1 [L,E=FOOBAR:$1] 

值是現在%{ENV:FOOBAR}訪問。


編輯另一種方式是處理步驟的要求和鏈條的規則:

# first path segment 
RewriteRule ^(bla|blo|bli|blu|bloi|bkdo|doid|boidi|woekj|dfpo8ds)/?([^/].*)?$ $2?sectionurl=$1 [QSA,C] 
# second path segment 
RewriteRule ^(blog|foo)/?([^/].*)?$ $2?arg1=$1 [QSA,C] 
# third path segment 
RewriteRule ^(bar|baz)/?([^/].*)?$ $2?arg2=$1 [QSA,C] 
# last rule 
RewriteRule ^$ section_index.php [L,QSA] 

但是當你使用PHP,你也可以使用PHP來解析請求的路徑,例如:

$_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']); 
$segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/')); 
$argNames = array('sectionurl', 'arg1', 'arg2', 'arg3'); 
foreach ($segments as $i => $segment) { 
    if (isset($argNames[$i])) { 
     $_GET[$argNames[$i]] = $segment; 
    } 
} 
var_dump($_GET); 

現在你只需要使用這個規則來發送每一個請求到PHP文件:

# exclude requests for existing files 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 
相關問題