Apache 2.2 VirtualHost宣言でmod_rewriteを使用して、自分のドメインへのすべてのリクエストを別のドメインにリダイレクトしようとしています。これには例外が1つあります。/audio
パスへのすべてのリクエストをにリダイレクトしたいと思います。特定の1つのパスを除くすべてのリクエストをリダイレクトするmod_rewriteルール
私はこれを行うためにRewriteCondとRewriteRuleを書いていますが、それは正しくないので、理由を理解できません。正規表現には文字列 "/ audio"のネガティブな先読みが含まれていますが、なんらかの理由で一致しません。私はのRewriteCondを変更した場合
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
:ここに定義があります
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]
(すなわち否定先読み部の外にスラッシュを入れて)、それは動作しますが、これの欠点は、そのリクエストです末尾のスラッシュのないmydomain.netにはリダイレクトされません。
誰かが間違っていることを指摘できますか?
(注:上記のRewriteRuleビットにおけるドメインの周りに角括弧はStackOverflow.comによって追加されている - それらが実際のコードでは存在しない)ここ
ルールは以下のとおり
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/mydomain.net/htdocs"
ServerName www.mydomain.net
ServerAlias mydomain.net
RewriteEngine on
RewriteCond {REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
RewriteLog logs/mod_rewrite_log
RewriteLogLevel 3
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
おかげ@mercutio - 完璧な理にかなっているが、まだ動作していないようです。 REQUEST_URIが/audio
で開始しないので、私はのRewriteRuleが無視されることを期待する
(2) init rewrite engine with requested uri /audio/something.mp3
(3) applying pattern '^(.*)$' to uri '/audio'
(2) rewrite '/audio' -> 'http://www.newdomain.net/'
(2) explicitly forcing redirect with http://www.newdomain.net
(1) escaping http://www.newdomain.net for redirect
(1) redirect to http://www.newdomain.net [REDIRECT/301]
:私はhttp://mydomain.net/audio/something.mp3にリクエストを作るとき
は、ここでのmod_rewriteのログが言うことです。
はパターンを適用しますuri '/ audio'それは別のパターンを処理しているように聞こえる。あるいは、ロジックはちょうど後ろ向きです。あなたは完全なルールセットを投稿できますか? – mercutio