0

すべてのリクエスト URL を .htaccess というファイルに渡す.htaccessファイルをセットアップしようとしGETていますindex.php。唯一の例外は、リクエスト URL がディレクトリresを指している場合です。

例:

/wiki/cool-stuff          => index.php?uri=/wiki/cool-stuff
/wiki/cool-stuff?news=on  => index.php?uri=/wiki/cool-stuff&news=on
/res/cool-photo.jpg       => res/cool-photo.jpg

2 つの問題:

  1. /wiki/cool-stuff2 番目の例で渡された GET 変数は、 index.phpには渡されません。
  2. アクセスすると/res(そうではありません/res/!!)/res/?uri=res 、突然ブラウザに表示されindex.phpuri=res/. /res/代わりにアクセスすると、 index.phpuri=res/表示され、ブラウザの URL はそのままになります (これで問題ありません)。

.htaccess : _

RewriteEngine on
RewriteBase   /subthing/

RewriteCond   %{REQUEST_URI}    !/res/(.+)$
RewriteCond   %{REQUEST_URI}    !index.php
RewriteRule   (.*)              index.php?uri=$1 

どうすれば望ましい動作を実現できますか?

4

1 に答える 1

1
  1. Query-String-Appendフラグを使用してみてください。QSA

  2. 末尾のスラッシュをオプションにします - 正規表現では、これは を追加することで実現され?ます。

新しい.htaccess:

RewriteEngine on
RewriteBase   /subthing/

RewriteCond   %{REQUEST_URI}    !/res(/.*)?$
RewriteCond   %{REQUEST_URI}    !index.php
RewriteRule   (.*)              index.php?uri=$1 [QSA]

/resフォルダーの正規表現を微調整して、/resabcリダイレクトされるようにしたことに注意してください(スラッシュが唯一のオプションの部分である場合、で始まるものはすべてres一致します.

Apache Mod_Rewrite ドキュメント

于 2012-07-24T13:22:09.303 に答える