タグ: プリティーURL

さくらインターネットで、concrete5 (5.7.5.2) の[sitemap]ページと[sitemap.xml]の対策

さくらインターネットで、concrete5 (5.7.5.2) の[sitemap]ページと[sitemap.xml]の対策

さくらインターネットで 起こることで 他のホスティングでは起こりません。
concrete5 5.7系において、『サイトマップ』ページのurlを 通常「sitemap」としますよね。

 しかしながら、さくらインターネットは、mod_rewriteが特殊な設定となっていて、
ないフォルダ名(sitemap/)があると、勝手に、拡張子を付与する機能があります。

ここでは、存在する(sitemap.xml)にします。とうか、されます。

なので、http://sample.com/sitemap/ とすると、mod_rewriteを設定していても、5.6系ではうまく、転送できたものが5.7系ではできません。
(※おそらく、プリティーURLのロジックがかわったせいでしょう)

最も、『サイトマップ』のページのURLを「sitemap_page」とかにすればいいんですけれど。2015/10/07現在、調査&トライ中ですが、いい方法が見つかっていません。^^;

あと考えた方法として、あまりカッコはよくないですが、index.php/sitemapにしてもいいならできなくはないですが、これも、mod_rewriteだけでは、ちょっとわかっていません。試験的に、以下のようにやってみました。

手順)concrete5 (5.7.5.2)の『管理画面』→『システムと設定』→(SEOと統計)『URLとリダイレクト』

プリティーURL
URLから index.php を除く
(.htaccess ファイル向けのコードはdefaultのまま。に以下赤行を追加)

RewriteEngine On
RewriteBase /
RewriteRule ^sitemap\.xml$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]

カノニカルURL
http://sample.com/
SSL URL は空白(※利用される方は、適宜)

URLリダイレクト
カノニカルURLでのみ表示します。(チェックをはずす)

手順2)concrete5のドキュメントフォルダに「sitemap」とフォルダを作成。
その中に、index.phpを設置。
内容は以下、

<?php
header("Location: ../index.php/sitemap"); /* ブラウザをリダイレクトします */
/* リダイレクトする際に、これ以降のコードが実行されないことを確認してください */
exit;
?>

 あまりカッコがよくない(第一、SEO的にどうなの?)ですので、あくまで備忘録だと思って記載しています。
もしわかる方がいらっしゃれば教えてください。

さくらのスタンダードで、sitemapページがsitemap.xmlになる

 『さくらのレンタルサーバ スタンダード』

※2015/06/19時点(仕様は適宜変更される場合がございますので、ご注意ください)

●ページ : サイトマップ
●カノニカルURL : sitemap

と設定して、sitemap.xml のファイルがある(通常は作成しているのである)とき

『サイトマップ』のページを表示すると、『sitemap.xml』の中身が表示されてしまいます。

 ★原因は、『さくらのレンタルサーバ スタンダード』が、特殊な「URLルーティング」 設定になっているためだと思われます。

(※未確認の推測ですが、独自ドメインのサービス仕様と、セキュリティ確保のため?) 「concrete5.6.3.3日本語」にて、「プリティーURL」をONにすると起こります。

 最も、本家サイト の質問があるように、実際には存在しないフォルダよりも、存在するファイルを 優先して表示するように、mod_rewrite(URLを自由に変換する機能)の設定されているようです。 これを一般的に、「特殊」設定と言われているものかと思います。

他のサーバで、かつ特殊な設定になっていないものは起こりません。


 ★回避方法ですが、2つあります。

1)●ページ : サイトマップ ●カノニカルURL : sitemap-list

というように、sitemap.xmlの「sitemap」と重ならないようにします。

なお、「プリティーURL」は、デフォルトのままでOKです。
ドメインのルート以外のフォルダにインストールしてある時は、
例) concrete5が、http://example.com/concrete5/ に保存されている場合
「RewriteBase /」 → 「RewriteBase /concrete5/」

 

2)他のサーバーと同じ表示にしたい(普通はね)

●ページ : サイトマップ
●カノニカルURL : sitemap
●ファイル表示(Rss): sitemap.xml

と機能してほしいとき

★concrete5がインストールされているフォルダに、
『sitemap』フォルダ(中身は空にする)を作成します。

★「プリティーURL」を以下のように設定します。

# -- concrete5 urls start --

RewriteEngine On
RewriteBase /
RewriteRule ^sitemap\.xml$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]

# -- concrete5 urls end --

※確認時、ブラウザのキャッシュを削除しておかないと、表示がかわりません。
concrete5のキャッシュではないです。