1

存在しないディレクトリを$1に基づいてデータベースが取得するphpファイルに転送するように動作するmod_rewriteルールがあります。

適切なディレクトリを表示するディレクトリが存在しない限り、すべてが正常に機能しますが、必要のない場合はクエリ文字列も追加されます。

私は過去数時間ウェブを精査し、運が悪かったのでさまざまな方法を試してきました。

誰かがこれをそのまま機能させる方法を知っていますが、クエリ文字列を取り除きますか?

どうもありがとう。

これが私のコードです:

RewriteEngine On
    Options +FollowSymlinks
    RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9a-zA-Z\-]+)/$ $1 [R]
RewriteRule ^([0-9a-zA-Z\-]+)$ product.php?product=$1

最終的に発生するのは、ブラウザがURLをhttp://domain.com/existing_dir/?product=existing_dirとして表示することです。

4

2 に答える 2

2

/それを試してみてください、それはプロセス全体を繰り返さずにそれ自体で削除します

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*?)/?$ product.php?product=$1

特殊文字を制限することを主張する場合、それは次のようになります。

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9a-zA-Z\-]+?)/?$ product.php?product=$1

+は1回以上の繰り返しであり、*は0回以上であり+?*?は空腹でないマッチングの修飾子です。これにより/?、あらゆるものにマッチングできます。

さらに、あなたの例では、最初のRewriteRuleは条件付きで実行され(ディレクトリが存在しない場合)、2番目のRewriteRuleは常に実行されるため(最初にプロセスが中断されない場合)、ディレクトリが存在する場合でも

于 2012-05-10T06:59:24.290 に答える
0

Mod_rewriteはクエリ文字列に影響を与えません。mod_rewriteに空のクエリ文字列を指定しない限り、常に新しいURLの末尾にタグが付けられます。これは、?だけを追加することによって行われます。新しい文字列の最後に。したがって、最初の行は次のようになります。

RewriteRule ^([0-9a-zA-Z\-]+)/$ $1? [R]
于 2012-05-10T07:39:25.503 に答える