- HOME >
- 【Movable Type】 >
- MTから生成した.htaccessでURLの正規化を共通化(プラグインを使わずにURL部分の文字列置換調整)
「.htaccess」をMTから生成して複数サイト(複数ドメイン)を管理する際、全サイト同じテンプレートだとかなり楽です。
下記、URLの正規化の場合で考えてみる。
通常、URLの正規化は「http://www.webase.jp」というドメインの場合で「www」ありで、index.htmlは省略してスラッシュ「/」終わりにしたいとすると、
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(webase\.jp)(:80)? [NC]
RewriteRule ^(.*) http://www.webase.jp/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.webase.jp/$1 [R=301,L]
となると思います。
(※サーバーによって多少表記が異なります。上記ヘテムルの場合。)
ドメイン部分はMTタグの「<$mt:WebsiteURL>」で取得できるので
<mt:BlogParentWebsite>
<$mt:WebsiteURL setvar="siteUrl"$>
</mt:BlogParentWebsite>
としておいて変数「https://www.webase.jp/」で使用するものとし、ドメイン部分に「https://www.webase.jp/」を置き換えます。
しかし、.htaccessの3行目「RewriteCond %{HTTP_HOST} ^(webase\.jp)(:80)? [NC]」の部分の置き換えができないのでモディファイア「replace」を使って文字列置換で調整します。
まず、「http://」を削除。
replace="http://",""
次に「www」がある場合は削除。
replace="www.",""
次にドット「.」は「\.」に置換。
replace=".","\."
次に、末尾のスラッシュ「/」を削除。
replace=".","\."
そうすると、下記になる。
RewriteCond %{HTTP_HOST} ^(<$mt:Var name="siteUrl" replace="www.","" replace=".","\." replace="http://","" replace=".","\." $>)(:80)? [NC]
しかし、これだと、もしサブディレクトリがサイトのルートの場合、間のスラッシュが削除されてサブディレクトリ名が残ってしまいます。
文字列置換のプラグインがあるようですが、これだけのためにプラグインを使うのも何かたいそうな感じ・・・。
ですので、最後の置換「replace=".","\."」とサブディレクトリの削除を正規表現での置換ができる「regex_replace」で対応してみます。
正規表現で末尾を意味する「$」を使い、末尾のスラッシュのみを置き換える場合を考えると、「regex_replace="//$/",""」になります。
サブディレクトリ部分のスラッシュ「/」以下を削除するのに「.+」を使うと、
「regex_replace="/.+/",""」になります。
完成したMTから生成する「.htaccess」は下記になります。
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(<$mt:Var name="siteUrl" replace="www.","" replace=".","\." replace="http://","" regex_replace="//$/","" regex_replace="/.+/","" $>)(:80)? [NC]
RewriteRule ^(.*) <$mt:Var name="siteUrl"$>$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ <$mt:Var name="siteUrl"$>$1 [R=301,L]
(※正規表現が得意な方であれば上記、3行目は「regex_replace」1回だけで置換できると思います。)
以上でプラグインを使わずに対応できてスッキリしました。
正規表現でかゆいところに手が届くようになっている「Movable Type」でした。
(※本ページはプロモーションが含まれています。)
- 広告
- 広告