リダイレクト

2015年7月10日 at 10:39

お世話になっております。

現在稼働中のサイトにて、次の現象が起きております。

まず、プリティURLは使用しています。
1.URLに、トップページ「xxxxxxx.co.jp」と入力しEnterで、「xxxxxxx.co.jp/index.php」にリダイレクトされてしまいます。
2.URLに、下層ページ「xxxxxxx.co.jp/sample」と入力しEnterでは、index.phpにリダイレクトされることなく、「xxxxxxx.co.jp/sample」が表示されます。

インストールサーバー:さくらインターネット
Concrete5のバージョン:5.6.3.3

なぜ、「index.php」にリダイレクトされてしまうのでしょう?

ご教示よろしくお願いします。

タグ:

Re: リダイレクト

2015年7月10日 at 13:01
Webサーバの情報とかお判りになりますでしょうか?
また、プリティURLを有効にした際に、.htaccessの設定情報が表示されたと思いますので、
そちらを開示して頂けると、正確な回答ができると思います。

そして、お困り事は具体的にはどういった事でしょうか?

以下、一般的な設定だとした場合の回答に成ります。
1)「xxxxxxx.co.jp」と入力しEnterで、「xxxxxxx.co.jp/index.php」にリダイレクト

こちらは、ドメインの後ろに/を付けないでアクセスした場合、
Webサーバ側から、Locationヘッダーというヘッダー情報がついた、レスポンスが返却されます。このヘッダー情報がついていると、ブラウザーはその通知されたURLにリダイレクト要求をします。(HTTPステータスは302が返っていると思います)
その通知のURLは、「xxxxxxx.co.jp/」と「/」が最後に付いたURLが返却されていると思います。

そして、ブラウザーはWebサーバの要求に応じて「xxxxxxx.co.jp/」にアクセスするのですが、
今度は、DirectoryIndexディレクティブの設定に従って、
「xxxxxxx.co.jp/index.php」等へのリダイレクトが発生していると思います。



2)下層ページ「xxxxxxx.co.jp/sample」と入力しEnterでは、index.phpにリダイレクトされることなく、「xxxxxxx.co.jp/sample」が表示

こちらは、Rewriteルールの設定次第で、そのURLがブラウザーが返却できるコンテンツがある場合は、リダイレクトせずにそのコンテンツを返す
という設定がされていれば、「1」とは挙動が異なる動きを設定できます。
(「1」はドキュメントルートへの要求リクエストですので、厳密にはmod_rewriteによるリダイレクトルールとは別の話しですが)
 

Re: リダイレクト

2015年7月10日 at 13:33
お返事ありがとうございます。

.htaccessは下記の通りです。

# -- concrete5 urls start --
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>
# -- concrete5 urls end --

で、困っているのは、オートナビで作られた各ページへのリンクには、ひとつも「index.php」がついていないにも関わらず、その中のホームのみクリックすると「index.php」にリダイレクトされてしまいます。
もちろん、手入力した場合でも同様です。
ドメイン名の最後に「/」はありません。
で、「index.php」は表示したくないだけなのです。

疑問点を具体的に書きますと、プリティURLを有効にしているので、「http://xxxxxxx.co.jp/sample」をクリックしても「http://xxxxxx.co.jp/index.php/sample」にはリダイレクトされず、「http://xxxxxxx.co.jp/sample」でアクセスできます。
なのに、ホームの「http://xxxxxxx.co.jp」にアクセスすると、「http://xxxxxxx.co.jp/index.php」にリダイレクトされてしまうのは、何がいけないのでしょうか?
 

Re: リダイレクト

2015年7月10日 at 14:01
サーバーの設定でindex.phpが表示される設定になっているのかな?
と思うのですが、
検索で
index.php 非表示で調べてみましたら、

RewriteRule ^ /index.php [L]


上△が入ってるサンプルを見ました。

公式にもサンプルがありました

http://concrete5-japan.org/help/faq/how_to_use_prettyurl/

上記の4番あたりが参考になると思います。
以下のこんなようになってます。
RewriteRule ^(.*)$ /index.php/$1 [L]


自分の現在稼働しているサイトでは

RewriteRule ^. index.php [L]


でやって見たが大丈夫だった。
 

Re: Re: リダイレクト

2015年7月10日 at 15:02
お返事ありがとうございます。
試してみましたが、うまくいきませんでした。

で、要求URLを見たら、存在するはずの「http://xxxxxxx.co.jp」となっていましたが、
ステータスコードが301となっていました。
なので、「http://xxxxxxx.co.jp/index.php」にリダイレクトされています。

そもそも、301が返ってくる事自体がおかしいと思ってます。
もう少し調べてみます。
 

Re: リダイレクト

2015年7月10日 at 15:18
htmlのタグがjavascriptで
もう一度http://~/index.phpを表示させてるとか、考えられるのですが?
たとえば、
index.htmかindex.htmlファイルがあって、index.phpに転送しているとかなどです。
 

Re: リダイレクト

2015年7月10日 at 16:28
あともう一つ

RewriteRule . /index.php [L]


最後の行を上記では?

ドッド 半角空白 スラッシュとならんでいます。
 

Re: リダイレクト

2015年7月10日 at 16:52
あとさくらインターネットでの状況が公式にありました。

http://concrete5-japan.org/help/5-6/install/hosting/sakura/#prettyurl

上記に何か書いてありますか?
 

Re: リダイレクト

2015年7月10日 at 16:54
ご教示ありがとうございます。

そもそも、最初の要求時にステータスコード301で返ってくるので、concrete5ではないのではと思っています。
現在、さくらインターネットに問い合わせしています。
回答が来るまで、しばらくお待ちください。
 

Re: Re: リダイレクト

2015年7月10日 at 17:03
読んだけどわからなかった。

わかった事は、直接htaccess.txtを作って、インストールディレクトリーにFTPして
名前を.htaccessにする事でした。
 

Re: リダイレクト

2015年7月10日 at 17:11
.htaccessを以下に変更すれば、ご期待の動作に成るかと思います。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^(.*)index.php$http://xxxxxxx.co.jp/$1 [R=301,L]
</IfModule>

ドメインの部分は、実際のドメインに変えて下さいね。
 

Re: リダイレクト

2015年7月10日 at 17:30
ご教示ありがとうございます。

残念ですが、index.phpは外れません。
最初のアクセスで、301が返ってきます。

また、ご教示通りにすると、http://xxxxxxx.co.jp/sample等の子ページが全て見れなくなります。
 

Re: リダイレクト

2015年7月10日 at 18:19
失礼致しました。
自機で確認致しまた。(Apache+concrete5.7.4.2)です。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://xxxxxxx.co.jp/$1 [L,R,NE]
</IfModule>
 

Re: Re: リダイレクト

2015年7月10日 at 18:36
度重なるご教示ありがとうございます。

子ページの読み込みエラーは解消されましたが、やはり最初のアクセスで301が返ってくるので、サーバー側の設定ではないかと思っています。
元々、作ってあったサイトのリニューアルで、かつサイト構築者はいなくなっているので、サーバー側の設定等がわからない状態なのです。

進展がありましたら、ご報告致します。
 

Re: リダイレクト

2015年7月11日 at 9:04
はやく良い方法がわかると良いですね。

もしかすると、index.html index.htmが優先になっていて、
このファイルがないときindex.phpに変わっているのかな?と思うのですが、
サーバーの設定をindex.php優先してみたら状況は
変わらないでしょうか?
 

Re: リダイレクト

2015年7月11日 at 14:32
pokinte 様

私も、さくらインターネットに引っ越ししたとき、
サーバーの設定が特殊であることに気づき、
だいぶ悩みました。以下の確認、設定でいかがでしょうか?

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

1).htaccess を ローカルpcにバックアップするかして、
完全に一旦削除してください。
もし、リネームでバックアップされるなら、
_150711_ht_access
のようにしてください。
サーバーの特殊設定でファイルを読み込まれないようにするため(考え過ぎならいいのですが・・・)。

2)プリティーURLを一旦オフにしてください。
  そして、concrete5 のキャッシュ設定を完全にオフしてから、concrete5のキャッシュをクリアしてください。

3)次に、確認するブラウザのキャッシュを完全に削除してください。

4)バッチジョブ(default設定のもの)5つを手動で、実行してください。
管理画面→システムと設定→自動実行ジョブ

5)この状態で、当然、xxxxxxx.co.jp/index.php で
  トップページを含め全てのページが見られることを確認してください。

※文字化けとかが発生しないとは思いますが、発生する場合、
管理画面から、文字コード等を適宜設定してください。
設定は、ドキュメントルートのwww/php.ini に設定されます。

サーバーは、euc-jpがdefaultですので、テーマファイルが、UTF-8の場合。
また、以下がないときは編集で適宜追加してください。
output_buffering = On

6)問題なければ、プリティーURLをONにしてください。
  自動で、.htaccess ファイルにリライトルールが追加されてるはずです。

# -- concrete5 urls start --
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>
# -- concrete5 urls end --

DirectoryIndex index.html index.htm index.shtml index.php index.cgi .ht
AuthUserFile /home/********/www/xxxxxxx.co.jp/.htpasswd
AuthType Basic
AuthName "Web access"
Satisfy all
Order deny,allow

上記は、通常default設定では見えませんが、わたしのところでは、設定いれています。

ブラウザで、表示をご確認ください。

7)これで解決しない場合、大変申し訳ございません。
現在、さくらインターネットにお問い合わせ中とのことですので、
その指示に従って設定してください。

 ※余談ですが、xxxxxxx.co.jpという、独自ドメインをご利用とのことですが、
 ネームサーバーとひもづける、www/作成されているフォルダ名が
 index とか、単純な設定になっていないかご確認ください。

 さくらの特殊設定で、xxxxxxx.co.jp/sitemap/ とかのページがあったとき、
 sitemap.xmlを作成される設定のとき、フォルダ名とファイル名(拡張子除く)が
同じだと、通常のサーバーでは問題がなくとも、sitemap.xmlにリダイレクト
されてしまいます。

 さくらでは、実ファイルが優先して表示(リダイレクト)する仕様になっていますので、
ご注意ください。『さくらのレンタルサーバ スタンダード』の場合。他のプランや、契約時期によって、サーバーの設定が微妙に違う場合も考えられます。
 

Re: リダイレクト

2015年7月13日 at 8:45
kiyopi2015 様

うまくいきました!
自動バッチジョブには一切触れていなかったのですが、
それが影響したのでしょうかね。

ご教示、誠にありがとうございました!
 

Re: Re: リダイレクト

2015年7月13日 at 19:27
pokinte 様

うまくいってよかったです。
ご連絡ありがとうございます。
 

Re: リダイレクト

2015年7月13日 at 20:15
pokinteさん

うまくいったとの事、良かったですね。
あまり、お役に立てず済みませんでした。
 

Re: リダイレクト

2015年7月13日 at 8:54
endo様、momonnga様

ご協力ありがとうございました!