.htaccessでリダイレクトするRewriteRuleでハマった

なんとなくうろ覚えだった、.htaccessでの301リダイレクトの書き方。

SIRIUSからWordPressへ移行するツールで、いろいろやろうとすると特定のパターンでのリダイレクトが必要になって書いてみたけど、すんなりいかない。

yくわかってなくてハマってこと。

RewriteRuleのマッチング対象は、URLのパス部分(ドメイン名の後)の.htaccessファイルが置いてあるディレクトリーの配下になる。
ドメインとかは含まれない。

RewriteRule ^.*/(.+)\.html$ $1.html

って書いたら、ドメイン名とか関係なくて、.htaccessが置いてあるディレクトリーからのパス。

あと上の例で、’.*’って書くと、当然’/’も含まれるし、何も無い場合もマッチする。
‘/’を含まないディレクトリー単独とかでマッチさせたければ、'[^/]+’って書かないといけない。

次にリダイレクト先。
上の例のように’$1.html’と書かれていれば、相対パスなので、RewriteBaseで指定されているところからの相対パスになる。
RewriteBaseが無ければ、.htaccessの場所から(のハズ)。

で、先頭に’/’を付けて’/$1.html’とすれば、ドメイン直下からとなる(ハズ)。

あと、Chromeのリダイレクトのキャッシュにもハマる。

Chromeは一度リダイレクトすると、その後リダイレクト元にアクセスしても勝手に前にリダイレクトしたURLの方にアクセスしにいく。
つまり、サーバー上の.htaccessを修正しても反映されてないように見えてしまう。

「.htaccessを直したのに、まだ正しくないの?」っていうことに陥る。

これを回避するのに、Chromeのキャッシュを削除するしかないんだけど、それ以前にテスト中は301でなく302でリダイレクトさせると、一時的な移動として判断されるのでキャッシュされないらしい。
今度からそうしよう。

参考:https://www-creators.com/archives/248

コメント

タイトルとURLをコピーしました