2012-04-01 7 views
0

何度も私がGoogleにそれを考えても、それについて考えることはできません。私は.htaccessファイルにRewriteRuleを持っています:RewriteRule ^/download/([^/\.])/?$ /downloadfile.php?f=$1 [L]mod_rewriteが予期せず実行しています

これを使うと、私のページはうまくロードされますが、リンクhttp://www.example.com/download/file.extに行くと、404ページが読み込まれます。しかし、ページをロードしてから、私のRewriteRuleをRewriteRule ^/download/([^/\])/?$ /downloadfile.php?f=$1 [L](RegExの変更を知らせる)に変更すると、リンクは正確に動作します...ページをリロードするまで、悪い正規表現のために500エラーが発生するまで表現? (私は私のApacheのエラーログをチェックして、それが悪い正規表現であることをどのように知っているか)

これを行うにはどうすればよいですか?私は正規表現のために(.*)([.*])を試しましたが、どちらもうまくいきませんでした。誰かが私が間違っていることを教えてくれますか?

答えて

1

.htaccessファイルで使用すると、mod_rewriteがURIから接頭辞(先頭のスラッシュ)を削除します。あなたの正規表現を削除する必要があります:

RewriteRule ^download/([^/\.]*)/?$ /downloadfile.php?f=$1 [L] 
+0

乾杯ジョーン、私もそれを見ていない。正規表現は実際には '([^ /] *)という事実を除いてすべて動作します。なぜなら、ピリオドを含む必要があるからです。それ以外に、よかった。 :) –

0

これは動作するはずです:

RewriteRule ^/?download/([^/]*) /downloadfile.php?f=$1 [L] 

先頭のスラッシュは、Apache 1.1で必要とバージョン2.x ます。また、ドット文字を否定したに取り除かれます。