2016-12-23 9 views
0

数年前、私は今htaccessのリダイレクトルールチェーンの優先順位

/blog/[TITLE] 

にこの

/blog/YYYY/MM/DD/[TITLE] 

からすべての私のWordPressのURLをリダイレクトし、私はすべての私のURLからリダイレクトするように私は/ /ブログを削除しましたこの

/blog/[TITLE] 

へ0
/[TITLE] 

その作業は素晴らしいです。今

これらのURL

/blog/YYYY/MM/DD/[TITLE] 

/YYYY/MM/DD/[TITLE] 

結果にリダイレクトします:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
RedirectMatch 301 /blog/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ /blog/$4 

RewriteRule ^blog/(.*)$ /$1 [R=301,L,NC] 

RewriteCond %{REQUEST_URI} ^/blog[/]?$ 
RewriteRule (.*)/[R=301,L] 

方法:ここで

404は私のリダイレクトルールです。しかし、ここで問題があります私はこれを修正するのですか?何か案が?正直言って、私はこれがどのように機能するか本当に理解したことはありません。 ;-)

+0

コードスニペットのセクションを削除してください。これらはHTML/JSコードでは役に立ちません。 – hjpotter92

+0

コードスニペットのセクションを削除しました。 – Marc

答えて

1

アイデアは、Apacheの書き換えルールで内部的に解決されない限り、ユーザーにリダイレクトされないようにチェーンリクエストを使用することです。最新の要求のみが301リダイレクトルールを持つユーザーに公開されます。

# Redirect to site without www. 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

# redirect /blog/YYYY/MM/DD/[TITLE] -> /blog/[TITLE] 
RewriteRule ^blog/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ /blog/$4 [NC] 
# continue chain, redirect /blog/[TITLE] -> /[TITLE] 
RewriteRule ^blog/(.*)$ /$1 [L,NC,R=301] 
+0

リダイレクト/ブログ/ YYYY/MM/DD/[TITLE] - >/blog/[TITLE]はエンドユーザーに結果を送信せずにApache内部で実行されます。リダイレクトを外部に公開したい場合は、フラグ[NC]を[NC、L、R = 301]に置き換えますが、次のリクエストでは[/ TITLE]にリダイレクトされます。 – Alexander

+0

あなたは正しいです。ブラウザのキャッシュに問題がありました。できます。ありがとうございました! – Marc

関連する問題