3

ユーザーが入力したとき、またはURLに表示されるmod_rewriteを作成しようとしています。

www.example.com/var1/var2/var3/var4/

と同じ出力

www.example.com?page=var1&cat=var2&subcat=var3&subsubcat=var4

ただし、変数の数に変更があった場合でも機能するため、変数は次のようになります。

www.example.com/var1/
or
www.example.com/var1/var2/
or
www.example.com/var1/var2/var3/
or
www.example.com/var1/var2/var3/var4/

以下を使用すると、www.example.com / var1 / var2 / var3 / var4 /でのみ機能し、その他では機能しません。

Options +FollowSymLinks RewriteEngine On RewriteBase /

RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]

CHAININGを使用して次のコードを使用すると、ある程度チェーンとして機能しますが、問題は

www.example.com/var1/var2/
www.example.com/var1/var2/var3/
www.example.com/var1/var2/var3/var4/

VAR1を「/」として出力するため、次のコードを使用して最初の変数を無視します。

Options +FollowSymLinks
RewriteEngine  On
RewriteBase /

RewriteRule ^([^&]+)/$ /?page=$1 [C]
RewriteRule ^([^&]+)/([^&]*)/$ /?page=$1&cat=$2 [C]
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3 [C]
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]

順序は常に同じなので、これは簡単なはずです。どうすればこれを機能させることができますか?

4

1 に答える 1

2

おそらく私は何かが足りないのですが、IMOではCここにチェーンフラグは必要ありません。次のルールを考慮してください。

RewriteEngine on
Options +FollowSymlinks -MultiViews

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/?$ /?page=$1 [L]

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/?$ /?page=$1&cat=$2 [L]

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3 [L]

RewriteCond  %{QUERY_STRING} !^page= [NC]
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L]

RewriteCond %{QUERY_STRING} !^page= [NC]無限のループがあることを確認するために、すべてのルールを追加しました。?また、各ルールの最後に追加することで、末尾のスラッシュをオプションにしました。

上記のルールはすべて、私のテストでは正常に機能しています。

于 2011-04-24T22:20:48.077 に答える