0

mod_rewriteを使用して、次の形式でWebアプリに識別子を渡します。

http://clipi.ca/1W

私はこれらを単純な正規表現で識別しています:

RewriteCond %{REQUEST_URI} ^/([0-9a-zA-Z]+)$
RewriteRule ^(.*)$ /index.php?urlid=%1 [L,QSA]

...ほとんどの場合正常に動作します。ただし、識別子がディレクトリの名前である場合、書き換えが失敗し、Apacheがディレクトリインデックスを返していることに気付きました。

この動作を停止し、書き換えルールをディレクトリにも適用するにはどうすればよいですか?(ディレクトリ内の実際のファイルが参照されるとすぐに、書き換え条件が失敗し、問題にならないことに注意してください。)

4

1 に答える 1

0

私はそれを自分で理解したかもしれないと思います。どうやら、Apacheは、書き換えルールを適用する前に、ファイルシステム上のディレクトリにマップするリクエストに末尾のスラッシュを追加します。それはちょっとばかげた、imoですが、オプションの末尾のスラッシュを条件付き正規表現に追加することによって:

RewriteCond %{REQUEST_URI} ^/([0-9a-zA-Z]+)/?$

...動作しているようです!

それでも、理想的な解決策は、Apacheにその末尾のスラッシュを最初から追加しないようにすることです。誰かがそれを行う方法を知っているなら、ここにそれを投稿してください、そして私はあなたに答えのクレジットを与えます。

于 2012-04-12T22:05:35.350 に答える