- 締切済み
mod_rewrite設定について
タイトル通りPHPではなく、mod_rewriteについての質問になります。 適切なカテゴリが見当たらなかったので、PHPカテゴリであれば適切な回答を頂けると考えてこちらに書かせていただきます。 一応、.htaccess内にmod_rewriteの記述をして動作させる事はできていますが、理解が浅く応用が効かないレベルです。 ちょっと、今回その応用が必要になって、ハマッてしまいました。 仮に現在、以下のようなユーザディレクトリ形式のレンタルサーバで動作しているサイトがあるとします。 ttp://example.com/hoge/ RewriteEngine On RewriteBase /hoge/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /hoge/blog/index.php [L] この例では、.htaccessを【ttp://example.com/hoge/】に置いて、その下の階層に置かれたblogディレクトリのindex.phpにリダイレクトさせるという事ですが。 今回該当サイトのサーバを移動する事になって、ユーザディレクトリ形式ではなく、サブドメイン式の以下のようなレンタルサーバへ移動する事になりました。 ttp://hoge.example2.com/ もちろん、.htaccessの内容も書き換えて、以下のようにちゃんと変更して動作させる事ができています。 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L] .htaccessを基準として見れば、自分(.htaccess)よりも下のblogディレクトリにアクセスするのは変わりないので、相対記述さえできれば…と試してみたところ、動きませんでしたorz。 どの階層に置かれても100%動く!!.htaccessが置かれたディレクトリをリネームされても大丈夫!! という記述方法があればベストなんですが。 ※特殊な環境では無理だが、一般的環境では8割方動くだろうという事でも可 そんな記述方法がないにしても理解が浅いために、「たぶん無理だろう」という予感を持っているだけで「このような理由で技術的に無理です」と言えないところに問題が。 ※ワードプレスのような広く使われているシステムが、ディレクトリ移動の際には書き換えの必要があるため。方法があるなら、きっとその方法は既に導入されているはずという予感から。 よろしければ、ご教授ください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
存在しないページ指定ページ表示設定でしょうか? そうなら http://hoge.example2.com/.htaccessに RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ blog/index.php [L] では? 301リダイレクトなら RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /blog/index.php [R=301,L] でどうでしょう?
- tany180sx
- ベストアンサー率63% (239/379)
よくわかりませんが、これではだめですか RewriteEngine on #RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ blog/index.php [L]
お礼
ローカルでテストした際にはRewriteBaseを書かずに動いて、サーバ上にアップすると動かないという事象にハマってから、必ず書くようにしています。 古いドキュメントになりますが… http://japache.infoscience.co.jp/japanese_1_3_6/manual/mod/mod_rewrite.html >デフォルトで、この prefix はそれ自身が一致するファイルパスです。 しかし、ほとんどのウェブサイトの URL は物理的なファイル名パスと関連するディレクトリではありません。ですので、この前提は間違っています! 正確な URL-prefix を指定するためには RewriteBase directive を使わなければなりません。 この辺りが原因ではないかと予測していますが、これまた理解が浅く正解なのかどうか判りません。 あくまで、書けばちゃんと動くから書く、という事でしかありません。