web-dev-qa-db-ja.com

サイト全体のRedirectMatchルールに例外を設ける

アクセスしようとしているパスを維持しながら、SSL対応サイトでクライアントを移動するためのこのRedirectMatchルールがあります。

Redirectmatch permanent (.*) https://www.foobar.com$1

そしてそれは完全に機能しています。ここで、リダイレクトする必要がある/ somepathの例外を追加しますnot。どうやってやるの?

Mod_rewriteを使用して、「書き換えてマッチングを停止しないでください」という書き換えを追加しますが、リダイレクトにはそのようなメカニズムはありません。また、!(/ somepath |/someotherpath)のように正規表現を簡単に逆にすると、$ 1パラメーターを取得できなくなります。

2
Luke404

Mod_rewriteを使用したくない理由はありますか?

これで機能を模倣できます:

 RewriteCond%{REQUEST_URI}!^ /(somepath | someotherpath)
 RewriteRule(。*)$ 1 [R = permanent] 
 RewriteRule http://%{SERVER_NAME}(。 *)https://www.foobar.com$1 [L] 

ApacheがPCREを使用していることに気づいていませんでした。そうなので、mod_aliasでやりたいことをするためにこのちょっとしたブードゥーを行うことができます:

 RedirectMatchパーマネント^ /?((?!(thisisfoo | thisisbar))。*)https://www.foobar.com/$1 

ここで、/ thisisfooと/ thisisbarはリダイレクトの例外です。

2
mark

ドキュメント( http://httpd.Apache.org/docs/2.2/mod/mod_alias.html#order )によると、Redirectsは検出された順序で処理されます。 。したがって、より制限的なルールを最初に配置し、最後にキャッチオールルールを設定することをお勧めします。

1
Ricky Morse