こんにちは私はBloggerからWordPressに私のブログを移動しようとしていると私はhttp://www.example.com/post-name/
のようなシンプルできれいなURL構造を維持したいと思います
ブロガーでは、私は次のURL構造を持っています:
www.example.com/2017/02/post-name.html
www.example.com/2017/02/post-name.html?m=1
www.example.com/2017/02/post-name.html?m=0
WordPress用のリダイレクトプラグインを使用して、BloggerからWordPress上のきれいなURLに構造体http://www.example.com/post-name/
を使用してリダイレクトすることができます。
次の正規表現を使っています
^/\d{4}/\d{2}/(.*).html+.*
http://www.example.com/$1/
上記のセットアップは完全にうまくいきましたが、私は.htaccess
ファイルを編集することによってリダイレクトサーバー側を使用して同じことを達成したいです、そしてこのツールはそれを.htaccess
フォーマットでエクスポートするオプションをサーバーで更新します。しかし、エクスポートされた書き換え規則は機能しません。
これがリダイレクトプラグインからの書き換えです。
# Created by Redirection
<IfModule mod_rewrite.c>
RewriteRule ^\d{4}/\d{2}/(.*).html+.* http://www.example.com/$1/ [R=301,L]
</IfModule>
# End of Redirection
.htaccess
ファイルの式に何をすべきですか、または問題がありますか?
RewriteRule ^\d{4}/\d{2}/(.*).html+.* http://www.example.com/$1/ [R=301,L]
これは「うまくいく」ように見えますが、整理できることがいくつかありますが、クエリ文字列(m=1
またはm=0
)はURLに残ります。
また、301秒はブラウザによって激しくキャッシュされるので、テストする前にブラウザのキャッシュをクリアしたことを確認してください。このため、302(一時的)リダイレクトでテストして301に変更する方が簡単な場合があります。 (ヒント:ブラウザの[オブジェクトインスペクタ]を開いて、[キャッシュを無効にする]オプションをオンにしてテストします。)
このリダイレクトは、あなたの.htaccess
ファイルの先頭、before WordPressフロントコントローラー(すなわちbefore# BEGIN WordPress
セクション)にも行く必要があります。
代わりに次のことを試してください。
RewriteRule ^\d{4}/\d{2}/(.+)\.html$ http://www.example.com/$1/? [R=301,L]
patternの末尾の+.*
はあまり意味がありません(ただし問題にならないはずです)。これは単にl
name__(of html
name__)を1回以上繰り返し、その後に何かを続けます。 .html
は常にURLパスの末尾です(クエリ文字列はURLパスの一部ではありません)、これは実際に$
(文字列の最後のアンカー)が続くべきです。
RewriteRule
substitutionの最後にある?
は、 "空の"クエリ文字列を作成することによって、ターゲットURLからクエリ文字列を効果的に削除します。あるいは、Apache 2.4以降では、代わりにQSD
name__フラグを使用できます(Query String Discard)。すなわち。 ... http://www.example.com/$1/ [QSD,R=301,L]
更新: /使用しても安全ですか...
まあ、あなたはそれが "あまりにも"一致していないとあなたが興味を持っているURLだけに一致することを確認するために正規表現でより具体的かもしれません。例えば、上記のディレクティブもフォームのURLに一致します:example.com/2017/02/foo/bar/post-name.html
これは(おそらく無効な)/foo/bar/post-name
へのリダイレクトになります。あるいはexample.com/2017/02/1111/22/post-name.html
でも、二重のリダイレクトになります。これはまったく問題にならないかもしれません、実際、これはあなたの状況次第では望ましいかもしれません。ただし、RewriteRule
パターンを変更することで、post-name
をWordの文字(a-z
、A-Z
、0-9
、_
)、およびハイフンに制限することもできます。例えば:
RewriteRule ^\d{4}/\d{2}/([\w-]+)\.html$ http://www.example.com/$1/? [R=301,L]
しかし、そうでなければ、それが「安全でない」とは思われません。