• 締切済み

mod_rewriteでこう書くと

某オープンソースのPHPプログラムに、動的ページを静的ページに見せるSEO対策として、 http://...../xxx.php というURLのphpファイル名の拡張子.phpをとって http://...../xxx/ で運用するよう、.htaccessに、 RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/?(.*) $1.php/$2 [L] という記述があります。 しかし、試しに私のWindows上のlocalhostで走らせて、自分のブラウザから拡張子なしのURLでアクセスすると、HTTP404のページ未検出エラーになってしまいます。mod_rewite自体のエラーは出ません。 私には、ここのRewriteCond, RewriteRuleがよく理解できず、なぜうまくrewriteされずにエラーになるのか、どう対処すればよいかわからずにいます。 どなたか、上記のディレクティブの意味するところ、または対処方法を教えていただけませんでしょうか。 ちなみに正規表現というものについては初歩的なことは理解しております(が、上記の正規表現は理解できません)。 よろしくお願いします。

みんなの回答

  • js_player
  • ベストアンサー率83% (10/12)
回答No.2

先ほど、Windows 上のApache で試してみたところ、 RewriteBase / を削除すれば正常に動作しました。

jamey
質問者

お礼

回答ありがとうございました。お礼が遅くなってすみません。 わからないなりに自分でいろいろ試したところ、 オープンソースでは、  http://ドメイン名/xxx.php のところ、自分の設定は  http://ドメイン名/ディレクトリ名/xxx.php であることが原因で、  RewriteRule ^([^/]+)/?(.*) ディレクトリ名/$1.php/$2 [L] と書き直したところ、うまくいきました。 #ご指摘の方法では、こちらではうまくいきませんでした。相変わらずよくわからないままですが。。。でもご助言どうもありがとうございました。

  • js_player
  • ベストアンサー率83% (10/12)
回答No.1

RewriteEngine on は記述したのでしょうか。 あと、少し気になったのですが、 RewriteRule ^([^/]+)/?(.*) $1.php/$2 [L] はたぶん RewriteRule ^([^/]+)/?(.*) $1.php?$2 [L] だと思いますが。

jamey
質問者

補足

回答ありがとうございます。 RewirteEngine onは記述してあります。 書いていただいたように"/"を"?"に修正して実行してみましたが 残念ながら動きませんでした。 全文は、以下です。 Options +FollowSymlinks AcceptPathInfo On RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/?(.*) $1.php?$2 [L]