.htaccessリダイレクトで特定URLや/index.phpだけ301リダイレクト

ドメイン/index.phpドメイン/のみのURL両方が別titleタグでGoogleにインデックスされているEC-CUBEで作ったサイトがある。/index.phpの方はリンクしてるところもないのに何でコッチもインデックスされているのかは不明。もちろん表示される内容は一緒である。

前述の全てのディレクトリの/index.phpと付くものを.htaccessでリダイレクトする方法では、EC-CUBEでいろいろな問題があることをお伝えした。さらに、

  1. カートを購入完了まで進めない

という、とんでもないことまで起こることも解りの絶対にやっちゃ駄目。

それでも何とか、ドメイン/index.phpを/のみに統一しようということで、全てのディレクトリではなく、トップドメイン/index.phpだけを.htaccessリダイレクトできないか模索。できた。

RewriteRule ^index.php http://ec-cube.webtex.jp/ [R=301,L]

これを.htaccessに記述すれば、ドメイン/index.phpのところだけをリダイレクトするので、EC-CUBEの問題は起こらない。

さらに、特定のディレクトリ例えば/shop などでやっている人も多いと思うが、その時は、

RewriteRule ^shop/index.php http://ec-cube.webtex.jp/shop/ [R=301,L]

これで、大丈夫ですね。

たまたまindex.phpのありなし両方でtitleタグ内容も変更カスタマイズした前後のタイミングで、別titleタグで検索エンジンにキャッシュされてるという状況がどうしも気持ち悪かったので、いろいろな調べをしたわけだが、特にEC-CUBE側の不具合やエラーの問題でもないので、実際には全く気にすることではない。

.htaccessでindex.phpを/スラッシュのみにリダイレクト

よく、.htaccessで/index.htmlなどのURLを/以降ないURLに
統一するためのリダイレクトを使うのが、それが原因で不具合…後述。

http://abc.com/index.html →  http://abc.com/
http://abc.com/index.php →  http://abc.com/

こういった場合は、/index.htmlと/のみがどちらでも同じページに
アクセスされるので、/のみに統一するために.htaccessに

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php?\ HTTP/
RewriteRule ^(.*)index\.php?$ http://ec-cube.webtex.jp/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ http://ec-cube.webtex.jp/$1 [R=301,L]

と記述して、どちらかに統一することが多い。

コレをEC-CUBEのインストールしてあるドメイン直下に設定してみたのだが、いろいろなエラーが発覚。やらない方が良い。

  1. オーナーズストアの購入商品一覧を取得するが無反応
  2. デザイン管理でブロックのレイアウト設定が不可能に

などの不具合があったので、.htaccessのindex.html省略方法は辞めた方がいいですね。まだまだ不具合エラーはありそうなので、EC-CUBEインストールサイトではやらないこと。

EC-CUBEを静的URLにmod_rewriteで置き換えてSEO対策

短い静的URLにする方法

商品詳細ページとカテゴリーリスト表示の2つを長い動的URLから
静的URLにする方法。SEO的にはすでにどっちでもいい状況だが、
URLのシンプルさ、キレイさ、わかりやすさ、長さなどの考慮。

手順1. .htaccessをアップロード

.htaccessファイルに下記のように記載して第一階層にアップ。

RewriteRule detail([0-9]+)\/? /home/▲▲▲/△△△/public_html/products/detail.php?product_id=$1 [L]
RewriteRule list([0-9]+)\/? /home/▲▲▲/△△△/public_html/products/list.php?category_id=$1 [L]

オレンジの部分は、サイトパス(フルパス)で設置のサーバーに
合った設定にする。把握としてはサイト内リンクを静的にして、
静的URLにアクセスした時にmod_rewriteでサイトパスのファイルに
アクセスを置き換えてその内容を短い静的URLで表示するという構造。

手順2. 管理画面からリンクパス変更

管理ページ > システム設定 > パラメータ設定

DETAIL_P_HTML欄
URL_DIR . “products/detail”

LIST_C_HTML欄 ←※LIST_P_HTML欄ではないので要注意
URL_DIR . “products/list”

手順3. テンプレートファイルのリンクパス変更

detail(商品詳細)は.tplファイル変更箇所なし。
list(カテゴリー表示)はテンプレートの変更が必要で

【bloc/category.tplファイル】
list.php?category_id=

list

【detail.tpl ファイル】
list.php?category_id=

list
の2カ所を置き換える。

以上。

最初は、detail/3 とかスラッシュの入るように公式本にも
あったので、そうやったが商品ページの【新規コメントを書き込む】が
Not Foundになって開いたので何が原因と思ったら、

http://●●●.jp/products/review.php?product_id=3
が正しいのに
http://●●●.jp/products/detail/review.php?product_id=3
と階層がズレたのでdetail3 list2 などのURLで終わるようにした。

余談だが、個人的な好みで.htaccessはピンク色のようにしてある。

RewriteRule ^products/detail([0-9]+)\/? /home/▲▲▲/△△△/public_html/products/detail.php?product_id=$1 [L]
RewriteRule ^products/list([0-9]+)\/? /home/▲▲▲/△△△/public_html/products/list.php?category_id=$1 [L]