2011-02-27 9 views
0

古いサーバーをarchive.example.comに移動しています。新しいサーバーはexample.comで実行され続けますが、すべてのwww URLはexample.comまたはarchive.example.comのいずれかに正規化されており、末尾スラッシュ問題。RewriteRule:古いパスをアーカイブサーバーにリダイレクトし、www以外のドメインに正規化しますか?

古いサーバーには多数のディレクトリがあるため、新しいサーバーで実行されるいくつかのディレクトリを除いて、すべてがパス情報を保持しながらarchive.example.comにリダイレクトする必要があります。私はリダイレクトしたくないと、新しいサーバ用に残りますディレクトリは、次のとおりです。たとえば

 
/(root) 
/static 
/blog 
/about 

 
example.com => example.com 
www.example.com => example.com 
www.example.com/ => example.com/ 

example.com/blog => example.com/blog 
www.example.com/blog => example.com/blog 
www.example.com/blog/ => example.com/blog/ 

他のすべてのディレクトリはarchive.example.comにリダイレクトする必要があります。例:ここでは

 
example.com/docs => archive.example.com/docs 
www.example.com/docs => archive.example.com/docs 
www.example.com/docs/ => archive.example.com/docs/ 

example.com/library/images => archive.example.com/library/images 
www.example.com/library/images => archive.example.com/library/images 
www.example.com/library/images/ => archive.example.com/library/images/ 

は、私は私のhttpd.confファイルに持っているものです。


ServerName example.com 
ServerAlias www.example.com 
UseCanonicalName On 

# canonicalize www.example.com to example.com 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ $1 [R=301] 

# redirect everything to archive.example.com except for a few directories 
RewriteCond %{REQUEST_URI} !^(/|/static|/blog|/about)$ 
RewriteRule ^/(.*)$ http://archive.example.com/$1 [NC,R=301,L] 

は、この正しいです、および/またはより正確な方法は何ですか?

答えて

0

私は自分の問題を発見したと信じています。古いサイトにリダイレクトされたのはRewriteRuleでした。

 

# redirect everything to archive.example.com except for a few directories 
RewriteCond %{REQUEST_URI} !^(/|/static|/blog|/about)$ 
RewriteRule ^/(.*)$ http://archive.example.com/$1 [NC,R=301,L] 
 

...と私はこれを書き直し:

 

# redirect everything to archive.example.com except for a few directories 
RewriteCond %{REQUEST_URI} !^/$ 
RewriteCond %{REQUEST_URI} !^/static.*$ 
RewriteCond %{REQUEST_URI} !^/blog.*$ 
RewriteCond %{REQUEST_URI} !^/about.*$ 
RewriteRule ^(.*)$ http://archive.example.com%{REQUEST_URI} [NC,R=301,L] 
 

がここに理由です

これは、私が質問を投稿する場合、私が持っていたものです。

最初にわかるように、1つの書き換え条件を4つの別々の条件に分割しました。これにより、新しいサイトが増えるにつれて除外のためのディレクトリをきれいに追加できるようになります。

また、スタティック、/ブログ/および/ aboutの後にドットスターを追加して、トップレベルだけでなく、それらのディレクトリ内のどのパスでも一致することに気づくでしょう。

最後に、RewriteRule行で、パターンから先行するスラッシュを削除し、末尾の/ $ 1を%{REQUEST_URI}に変更しました。パターンから変数を格納する必要はありません。サーバー名を変更するだけで済みます。パターンからパスを抽出するのではなく、同じ%{REQUEST_URI}変数を使用して明示しました。前の4行で使用されました。

ところで、これは私が最初に混乱を招いた原因の1つでした。なぜなら、ChromeがDNS /パス情報をキャッシュしていたからです.Ctrl-F5を押してキャッシュを消去すると、変更内容を確認できます。

0
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^gotactics.net$ [NC] 
RewriteRule ^(.*)$ http://gotactics.net/$1 [L,R=301] 

これは、すべてのWWWを削除します。私はあなたがそれを変更することもできますことを確認し、必要に応じて違う。

関連する問題