0

私は現在使用しています:

RedirectMatch 301 http://blog.domain.com/(.*) /blog/article/$1

blog.domain.com/article-title のような古いリンクを www.domain.com/blog/article/article-title にリダイレクトするには

しかし、単純に blog.domain.com にアクセスすると、www.domain.com/blog/article に移動します。

これは意図しない副作用です。blog.domain.com/ 自体を単純に www.domain.com/blog にリダイレクトしたいのですが、その中のコンテンツは上記のようにリダイレクトします (正常に動作します)。

どんな助けでも大歓迎です!

4

1 に答える 1

1

/(.*)は、スラッシュの後に 0 個以上の文字が続くものhttp://blog.example.com/と一致します。これは、一致してこのルールによって処理されることを意味します。に変更すると/(.+)、スラッシュの後に 1 つ以上の文字が続く場合にのみ一致し、ルート リダイレクトが停止します。このようなものはどうですか:

Redirect 301 / http://www.example.com/blog
RedirectMatch 301 /(.+) http://www.example.com/blog/article/$1

[www.]example.com が別の仮想ホストにあると仮定すると、これは blog.example.com の仮想ホストに配置された場合に機能します。単一の仮想ホスト内からそれらすべてを処理している場合、これはそれ自体に際限なくリダイレ​​クトされます。1 つの vhost でそれを処理する唯一の方法は、mod_rewrite を使用することです。おそらく、次のようなものです。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?blog\.example\.com$ [NC]
RewriteRule ^$ http://www.example.com/blog/ [R=301,L]

RewriteCond %{HTTP_HOST} ^(www\.)?blog\.example\.com$ [NC]
RewriteRule ^(.+)$ http://www.example.com/blog/article/$1 [R=301,L]
于 2012-06-24T23:56:10.383 に答える