.htaccessに次のコマンドがあります
RewriteCond %{HTTP_Host} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]
%2は2行目以降で機能していません。 %2の変数を定義して、すべてのRewriteRuleコマンドで使用できますか?次のコマンドは動作します
RewriteCond %{HTTP_Host} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
RewriteCond %{HTTP_Host} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]
ただし、条件を複製せずに複数のルール行に%2を使用します。
変数はApache varとして保存する必要があり、条件を繰り返すことなく使用できます。
Apache変数の保存は、2行目に示されています。 3行目と4行目の保存された変数の使用。
RewriteCond %{HTTP_Host} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule .? - [E=Wa:%1,E=Wb:%2]
RewriteRule ^(.*?)-([a-z]+) %{ENV:Wb}/$1.%{ENV:Wb} [L]
RewriteRule ^(.*?)-([0-9]+)([a-z]) %{ENV:Wb}/$1$3.$2 [L]
RewriteRuleフラグを使用できますS|skip
複数のRewriteRulesを単一のRewriteCond(またはRewriteCondsのセット)に結び付けるため。 1つのCondを3つのルールに適用する例を次に示します。
RewriteCond %{HTTP_Host} !^www.mydomain.com$
# skip rules if NOT within domain - only way to tie multiple rules to one cond
RewriteRule .? - [S=3]
RewriteRule ^path1(/.*)$ /otherpath1$1
RewriteRule ^path2(/.*)$ /otherpath2$1
RewriteRule ^path3(/.*)$ /otherpath3$1
既存のCondを複数のルールで機能するように変更するには、以下を行う必要があります。
スキップされたルールでRewriteCond(%1など)を指す後方参照を使用することはできないことに注意してください。これらは、スキップするRewriteRuleでのみアクセス可能です。
明らかに、これはあまり面白くありません。特に物事が成長し、より複雑になるにつれて。ただし、RewriteRuleステートメントにはあまり知られていないオプションがあり、次のN個のRewriteRuleステートメントをスキップするようApacheに指示します。 [S = N]。そのため、リクエストがファイルではなくディレクトリでもない場合に毎回チェックする代わりに、次のようにします。
#
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [S=3]
RewriteRule ^([^./]+)/$ http://www.santweb.co.uk/$1 [L]
RewriteRule ^([^./]+)/([^./]+)/$ http://www.santweb.co.uk/$1/$2 [L]
RewriteRule ^([^./]+)/([^./]+)/([^./]+)/$ http://www.santweb.co.uk/$1/$2/$3 [L]
#
私はこれを以下から見つけました: http://www.sant-media.co.uk/2010/03/applying-rewritecond-to-multiple-rewriterule-in-htaccess/
役に立つと思う
Apache 2.4から、<If>
ディレクティブを使用できます。
RewriteEngine On
<If "%{HTTP:Upgrade} == 'websocket'">
RewriteRule /nidoran/(.*) ws://localhost:8080/nidoran/$1 [P,L]
RewriteRule /kakuna/(.*) ws://localhost:8081/kakuna/$1 [P,L]
RewriteRule /porygon/(.*) ws://localhost:8082/porygon/$1 [P,L]
</If>