2009-05-04 12 views
0

私は私のhtaccessファイルに次のように50回使用している場合:?mod_rewriteどこの言葉を使っていても、 "変数"に入れることはできますか?

のRewriteRule ^(BLA | BLO | BLI |ブルーレイ| bloi | bkdo | DOID | boidi | woekj | dfpo8dsを)/ $ /section_index.php? sectionurl = $ 1 [L]

これは、すべての行で再び使用するのではなく、変数にbla | blo | bli | blu | bloi | bkdo | doid | boidi | woekj | dfpo8dsを入れるだけですか?もしそうなら、どうしたらいいですか?

+0

あなたの問題は何ですか?どのように変数があなたの問題を解決すると思いますかの例を教えてください。 – Gumbo

+0

問題は、htaccessファイルで、そのrewriterule行を何度も何度も使用していることです。毎回私はbla | blo | bli | blu | bloi | bkdo | doid | boidi | woekj | dfpo8ds pieceをもう一度書く必要があります。だから私はそれを変数に入れて、これをやってみたいです: RewriteRule ^(MVARIABLE)/?$ /section_index.php?sectionurl=$1 [L] – PeterV

+0

なぜ同じ式を複数で使うのですか?一つのルール?あるいは、この式は別の式の部分式(多分接頭辞)でしょうか?このようなルールの例が参考になります。 – Gumbo

答えて

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] 
+0

RewriteRule ^(%{ENV:FOOBAR})/?$ /section_index.php?sectionurl=$1 [L] – PeterV

+0

検索パターンに変数を使用することはできません。しかし、あなたは 'RewriteCond%{ENV:FOOBAR}%{REQUEST_URI} ^(bla | blo | bli | blu | bloi | bkdo | doid | boidi | woekj | dfpo8ds)/ \ 1'のような追加の' RewriteCond'を使うことができます。しかしそれは非常にエレガントではありません。 – Gumbo

関連する問題