web-dev-qa-db-ja.com

完全なURLの301リダイレクトを行う方法

リダイレクトできないURLがたくさんあります。または、.htaccessのmod_rewriteで書き換えることができるので、代わりに書き換えて、301リダイレクトを手動で作成しました。レコードが多すぎず、約40のリダイレクトであり、基本的にExcelテーブルからURLをコピーしています。しかし、サブドメインの完全なURLをメインドメインにリダイレクトする方法:

この方法でリダイレクトしたい:

http://m.somesite.com.au/site/somesite/faqs -> 301 http://www.somesite.com.au/faqs/

そしてもちろん、この方法でグローバルサブドメインをリダイレクトします。

http://m.somesite.com.au -> 301 http://www.somesite.com.au

実際に機能するもの。何が間違っていますか?

例えば:

これは作業をリダイレクトします

redirect 301 /about-us/go-social/ http://www.somesite.com/about-us/
redirect 301 /about-us/team/John/ http://www.somesite.com/about-us/

そして、同様のリダイレクトの全体の束、そしてこのようなリダイレクトについては、動作しません:

このリダイレクトは機能しません

redirect 301 http://m.somesite.com.au/site/somesite/faqs http://www.somesite.com.au/faqs/

その方法で完全なURLをリダイレクトできますか、または別の解決策がありますか?それでもRewriteCondを使用すると、これは機能しません。

# Single URL 

RewriteCond %{HTTP_Host} ^m\.somesite\.com\.au$ [NC]
RewriteRule ^site/somesite/faqs/?$ http://www.somesite.com.au/faqs/ 


# Global subdomain redirect
RewriteCond %{HTTP_Host} ^m\.somesite\.com\.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [NC,L,R=301]

.htaccessファイル:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress


# 301 Redirects
redirect 301 /about-us/go-social/ http://www.somesite.com.au/about-us/
redirect 301 /about-us/rider-profiles/Alex/ http://www.somesite.com.au/about-us/
{...}

# redirect http://m.somesite.com.au/site/somesite/faqs to http://www.somesite.com.au/faqs/
# m.somesite.com.au redirects
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_Host} ^m\.somesite\.com.au$ [NC]
RewriteRule ^site/somesite/faqs/?$ http://www.somesite.com.au/faqs/ [NC,L,R=301]


# Global subdomain redirect
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_Host} ^m\.somesite\.com.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [R=301]
2
Alan Kis

redirect 301 http://m.somesite.com/site/somesite/faqs http://www.somesite.com/faqs/

ソースURLはスラッシュで始まるURLパスである必要があるため機能しません(動作するリダイレクトに使用したように) 、絶対URLではありません。

つまり、次のように記述する必要があります(サブドメインドキュメントルートにある.htaccessファイル内)。

redirect 301 /site/somesite/faqs http://www.somesite.com/faqs

PDATE:ターゲットURLの末尾から末尾のスラッシュを削除したことに注意してください。両方の末尾のスラッシュを含めるか、両方の末尾のスラッシュを含めるのいずれかです。

そのようにして完全なURLをリダイレクトできますか

「完全なURL」とはどういう意味ですか?これは最初のリダイレクトと同じです。必要に応じて、完全なURLをリダイレクトできます。 (?)

PDATE:m.example.comwww.example.comは(コメントに記載されているように)まったく同じ場所を指しているため、リダイレクトループに注意する必要がありますが、これには問題ありません。 1。ただし、これは。Hostを具体的にチェックできるため、mod_rewrite(以下を参照)を使用する方が適切です。

それでもこれは動作しません、RewriteCondを使用して

Redirect(mod_alias)とRewriteCond/RewriteRule(mod_rewrite)は異なるApacheモジュールに属していることに注意してください。したがって、実行の順序は予期しないものになる可能性があるため、両方のモジュールからの外部リダイレクトをnever混在させる必要があります。

すでにこれを行っていると仮定しますが、... mod_rewriteを使用するには、書き換えエンジンを有効にし、FollowSymLinksも有効にする必要があります。

Options +FollowSymLinks
RewriteEngine On

PDATE:(.htaccessファイルをポストした後)ディレクティブの順序は重要です。これらの外部リダイレクト(mod_rewriteを使用)mustは、WordPressinternal rewrites

外部リダイレクトは、.htaccessファイルの最上部に来る必要があります。

ファイルの最上部にRewriteEngineおよびOptionsディレクティブを1回だけ含める必要があります。

Mod_rewriteリダイレクトと競合する可能性があるため、mod_alias Redirectsを削除/変換します。

RewriteCond %{HTTP_Host} ^m\.somesite\.com.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [R=301]

少しきちんと...

RewriteCond %{HTTP_Host} =m.somesite.com.au
RewriteRule (.*) http://www.somesite.com.au/$1 [R,L]

すべてのリテラルドット(\.)をエスケープし、開始(^)および終了($)アンカーを使用するか、exact=プレフィックス/辞書編集的に等しい演算子)と一致します。 .*パターンのアンカーは必要ありません。 Lフラグをリダイレクトで使用することをお勧めします(これは最後のフラグですが)。

一時的な(RまたはR=302)リダイレクトで常にテストします-永続的なリダイレクトとは異なり、これらはブラウザーによってキャッシュされません。満足しているときは、それが機能しているので、パーマネント(301)リダイレクトに変更します。

5
MrWhite