• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mod_rewriteでアドレスを書き換えたい)

mod_rewriteでアドレスを書き換えたい

このQ&Aのポイント
  • mod_rewriteを使って、アドレスの書き換えを試みていますがうまくいきません。
  • 参考にした情報では、RewriteRuleの正規表現パターンでURLを書き換える方法が示されています。
  • localhostでmod_rewriteを使用することができるかどうか、またRewriteRuleの'^'がどのように機能するのかについて疑問があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 >index.phpは、testフォルダーにあります。 .htaccessを置いてあるディレクトリから見て、RewriteBaseを指定します。 なので、testフォルダに.htaccessを置くと、 RewriteBase / となる理屈・・・。 ひとつ上のhtdocsに置いたので、そうなりますね。 っちゅうか、それは聞いてないよ??? >この場合とは、どのような条件のためでしょうか? httpd.confで指定しない場合という事です。 厳密に言えば、httpd.confで指定しているDocumentRootと、Rewriteするためのパスを解釈して欲しい一番上の階層が違う場合(レンタルサーバーなどは、殆どこんなの)ですね。 >しかし、相対パスでしているcssが適応されません。 ページ内のCSSやJS、画像ファイルなどは、別途GETリクエストで取得されます。 この時に、 localhost/test/i/test としてアクセスされていて、index.phpの方で、 <img src="../iamge.jpg"> となると、先ほどのGETリクエストは、 localhost/test/i/image.jpg を探しに行くので、表示されない事になります・・・。 回避策としては、 1.階層構造をよく吟味する。 2.相対パス指定をやめる。 3.Rewriteしてしまう。 ですかねぇ・・・。

a-z_A-Z
質問者

お礼

ありがとうございます。 再度質問後にいろいろ試してわかったのですが、追記の情報はindex.phpより、.htaccessの場所の情報の方が必要だったんですね。 私は、htdocsの中にフォルダーを作ってテストしています。そんなテストしているフォルダーがたくさんあります。 そのため、htdocsではなくフォルダーの中に.htaccessがあります。 普通は、htdocsに置くのがあたりまえですよね? まったく失礼しました。 cssの件は、リンクをmod_rewriteのアドレスに統一するために、追加のプログラムを書く必要があります。 その時に、絶対パスに書き換えることにします。 このたびは、とても詳しい説明をありがとうございます。 また何かありましたらよろしくお願いします。 ありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 とりあえず順番に・・・。 >.htaccessをつくり この場合、RewriteBaseが必要です。 つまり、 RewriteEngine on RewriteBase / RewriteRule ^test/i/([0-9A-Za-z)]+)$ /test/index.php?p=$1 [L] とまぁ、こうなる訳ですな・・・。 Baseディレクトリを指定する事で、.htaccessをおいてあるフォルダから、パスを算出してねという意味です。 その代わり、RewriteRuleの先頭に/を付けません。 >疑問1.xamppでlocalhostでmod_rewriteができるのだろうか? はい、できます。 xamppでしたら、httpd.confでもよさそうですが・・・。 >疑問2.参考にした情報のRewriteRuleの"^"がわからない。正規表現の"^"とは文頭にマッチすると思います。この場合の文頭とは? http://domain この後に続くアドレスの先頭という意味です。

a-z_A-Z
質問者

お礼

ありがとうございます。 教えていただいた通り試してみました。 でも、思うとおりにはなりませんでした。 そこで、次のように修正しました。 【追加条件】 index.phpは、testフォルダーにあります。 ファイル構成 c->xampp->htdocs->test->index.php ------------------------------ そこで、htaccessを RewriteBase /test/ RewriteRule ^i/([0-9A-Za-z)]+)$ index.php?p=$1 [L] すると、ページが表示されました。 しかし、相対パスでしているcssが適応されません。 なぜでしょう? >この場合、RewriteBaseが必要です。 この場合とは、どのような条件のためでしょうか?

関連するQ&A