質問: .htaccessの設定で下記のように変換をしています。 ``` deny from all 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 > > > よろしくお願いします。
回答: これでできそうな気もしますがどうでしょうか? ``` Order deny,allow deny from all RewriteEngine On RewriteRule ^/login$ /login.php [L] ```