質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

3回答

8122閲覧

sakuraサーバー RewriteRule がうまく動作しない

退会済みユーザー

退会済みユーザー

総合スコア0

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2017/03/03 10:04

編集2017/03/09 01:38

.htaccessの設定で下記のように変換をしています。

<Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files> Order deny,allow RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L]

example.com/login → example.com/login.php(アクセスしたいURL)
example.com/login → /home/username/www/login.php(アクセスしたいファイル)
結果は「not found」となってしまいます。

※example.com/login.php にアクセスすると問題なく表示されます。

いろいろ調べて、下記のようにすると動作することがわかりました。
転送先のファイル名を変更するという方法です。

RewriteRule ^([^\.]+)$ $1_file.php [NC,L] example.com/login → /username/www/login_file.php

同様の症状に出くわした人がいました。
http://nymemo.com/sakura/1371/

他のレンタルサーバーも使っていますが、sakuraだけこのような動作になります。
そこでサポートに確認をしたところ無回答の返事が来ました。

大変申し訳ございませんが .htaccess の内容等、お客様にて用意
されたコンテンツにつきましては弊社ではサポートを行うことは
出来ません。ご了承くださいますようお願いいたします。

なお RewriteRule に対する弊社独自の設定等は行っておりません。

また他のお客様より同様のお問い合わせは確認できておりません。

同様の問い合わせはないかもしれませんが、同じ症状のリンクは伝えたんですけど…。

sakuraのサポートが言われるように「独自の設定をしていない」という場合、
何が原因でこのような状況になっているのでしょうか?

最後の一行を次のように変更してテストしました。

RewriteRule ^test$ login.php [NC,L]

example.com/test にアクセスをすると「500エラー」が発生しました。

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

サーバーのエラーログには次の情報が残っていました。

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

[追記]
テストで一番下の行を次のよう変更してみました。

RewriteRule ^([^\.]+)$ https://www.google.co.jp/?redirect=$1.php [NC,L]

$1がどのような結果で返ってきているのか確認をするのが目的です。
その結果、
転送後にファイルが存在する場合は「NotFound」
転送後にファイルが存在しない場合はGoogleに転送されました。

example.com/login (login.php有り) → NotFound
example.com/dummy (dummy.php無し) → https://www.google.co.jp/?redirect=dummy.php

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2017/03/03 11:30

どういうリライトをしたいのか書かれない無いです。コードはちゃんと書いた通りに動いているはずです(思った通りには動かない)。
退会済みユーザー

退会済みユーザー

2017/03/03 17:28

otn

2017/03/03 21:49

どういうURLをどのように書き換えたいのですか?
退会済みユーザー

退会済みユーザー

2017/03/04 01:18

URLとしては hogehoge.com/loginhogehoge.com/login.php になります。加筆します。
退会済みユーザー

退会済みユーザー

2017/03/08 14:21

修正しました
Zuishin

2017/03/08 20:36

どういう URL へのアクセスをどういう URL へリダイレクトしたいのにどういう URL にリダイレクトされるのか、つまり入力とあるべき出力と現在の出力をはっきり書いてください。どれがどれやらわかりません。
退会済みユーザー

退会済みユーザー

2017/03/09 01:09

追記しました。example.com/login → /username/www/login.php(ファイル保存先) example.com/loginexample.com/login.php(アクセスしたいURL)
Zuishin

2017/03/09 01:13

最後はリダイレクトループが発生しているので、他にも設定があるんでしょう。それが邪魔をしているのでは?
otn

2017/03/09 01:19

あいかわらず、「こうしたい」が書かれていません。
退会済みユーザー

退会済みユーザー

2017/03/09 01:20

.htaccessの全文を載せました。 >Zuishin
退会済みユーザー

退会済みユーザー

2017/03/09 01:21

これです。書いてますが…。 example.com/login.php(アクセスしたいURL) >otn
Zuishin

2017/03/09 01:30

私もよくわかっていません。つまり、ftp://example.com/username/www/login.php に PHP ファイルを置いた。これは何もしなければ http://example.com/login.php でアクセスできるものだが、http://example.com/login でアクセスしたい。こういうことですか?
退会済みユーザー

退会済みユーザー

2017/03/09 01:34 編集

はいそうです。直接 login.php と指定すると問題なく表示されます。
otn

2017/03/09 01:45

ああ、入れ違いで書かれてましたね。
guest

回答3

0

ベストアンサー

解決しました。
.htaccessに下記コードを追加しました。

Options -MultiViews

調べていくうちにAapcheのMultiViewsが怪しいと思い、昨日さくらに問い合わせをしていました。

少し前に返事が届き**「MultiViewsは有効になっている」**ということが確認できました。
もしやと思い、login.htmlのダミーファイルをアップロードして example.com/login にアクセスをすると example.com/login.html の内容が表示されました。

.htaccessで処理される前に移動していたものと思われます。
MultiViewsは条件によって自動的に処理されるようで…
似たファイル名があると処理する、無ければ処理しないようになっているようです。

/login に似た login.php があるので login.html へ
/test に似たファイルはないので .htaccess に渡されて処理された。

というのがこれまでの流れのようです。(意味不明な条件ですが…)

MultiViewsは.htaccessのOptions設定でoffにできるようなのですが、さくらレンタルサーバーはOptionsが設定できないようになっていました。
ところが、偶然にも本日さくらサーバーから「.htaccess でのOptions設定可能化」というメールが届きました。

お客様より多くのご要望をいただいておりました、.htaccess での

Options設定ができるようになりました。
Options では、All,FollowSymLinks 以外の機能が設定可能です。

というわけで、上記のコードを追加したところ目的通りの動作をすることが確認できました。

アドバイスありがとうございました。
やり取りのお陰で解決へのヒントを得ることができました。

投稿2017/03/09 11:19

編集2017/03/12 17:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これでできそうな気もしますがどうでしょうか?

<Files ~ "^\.(htaccess|htpasswd)$"> Order deny,allow deny from all </Files> RewriteEngine On RewriteRule ^/login$ /login.php [L]

投稿2017/03/09 02:08

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/03/09 10:41

ご提供頂いたコードをまるごと.htaccessに設定してみました。 結果は次のとおりです。 example.com/login → 404 NotFound example.com/login/ → 404 NotFound ※googleへの転送はチェック用です。 example.com/login.php では表示されます。 よろしくお願いします。
guest

0

対症療法としては、RewriteCondの行を削ればいけそうな気がします。
存在するファイルはすべて拡張子ありという場合は、RewriteRuleでピリオドを含む場合は除外されるので大丈夫。

一応、404になる可能性としてありえるのが(当てはまって無い気がしますが)、
/home/username/www/loginというディレクトリがあるケースです。

この場合、http://example.com/loginは、http://example.com/login/にリダイレクトされて、さらにhttp://example.com/login/.phpにリライトされ、/home/username/www/login/.phpが無いため、404になる。

ただし、この場合はブラウザのアドレスバーがhttp://example.com/login/に変わるので気づくはず。

投稿2017/03/09 03:01

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/03/09 10:39

回答ありがとうございます。次のようなテスト結果となりました。 【削除】 RewriteCond %{REQUEST_FILENAME} !-f example.com/login → 404 NotFound example.com/login/ → 404 NotFound example.com/test → https://www.google.co.jp/?redirect=test.php example.com/test/ → https://www.google.co.jp/?redirect=test/.php ※googleへの転送はチェック用です。 loginというフォルダは現在のフォルダ、上位フォルダ内にもありません。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/03/09 10:42

example.com/login.php では問題なく表示されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問