1

私のhtaccessでは、このコードを使用して、wwwが削除された1つのディレクトリと強制された場合はhttpSを除いて、www以外のすべてのリクエストをwwwにリダイレクトします。

RewriteCond $1 !^example1
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/example1/(.*) [NC]
RewriteRule ^(.*)$ https://example.com/example1/%1 [R=301,L]

私の問題は、example2 のような例外をさらに追加したいときです。どうすればいいですか?

また、例外ディレクトリが www.example.com/dir/example3 のように 1 レベル以上下にある場合、どうすればよいですか?

4

1 に答える 1

0

さて、2つの選択肢:

  1. リテラル文字列の代わりに正規表現を指定する必要があり、その正規表現はすべての例外と一致する必要があります。

  2. リライトマップを使用します。ドキュメントをご覧になることをお勧めします。


正規表現の使用:

# some expections
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/(example[0-9]+.*)$ [NC]
RewriteRule ^(.*)$ https://example.com/%1 [R=301,L]

# the default rule: => add "www."
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

私は状況を好転させ、最初に例外を設定し、最後に「すべてをキャッチ」のデフォルトを設定しました。明らかに、最初の行を2倍にすることで、さらに例外を追加できます。または、正規表現を変更します。明らかに、必要な正規表現の詳細は、例外のコレクションによって異なることに注意してください。あなただけが知っています...私はあなたが優れたマニュアルを読むことをお勧めします。


より複雑な正規表現の代わりに、条件のブロック内で論理演算子を使用することもできます。

# some expections
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/(example1.*)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/(example2.*)$ [NC]
RewriteRule ^(.*)$ https://example.com/%1 [R=301,L]

# the default rule: => add "www."
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

書き換えについて話すときに十分な頻度で繰り返すことができない2つの重要なこと:

  1. マニュアルを読んでください!それは優れており、正確な説明と良い例が付属しています。

  2. メインサーバー構成にアクセスできる場合は、REWRITE DEBUGGINGを使用します。書き換えモジュールは、このために2つのコマンドRewriteLogを定義しますRewriteLogLevel。いくつかのログファイルとおそらく7のレベルを構成します。次に、単一の要求を行い、ログファイルの新しいエントリを監視します(を使用してtail -f /path/to/logfile)。これは、書き換えエンジン内で何が起こり、予期しないことが起こり始める場所を理解するのに役立ちます。

于 2012-11-22T16:36:45.207 に答える