2012-04-01 48 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時,mod_rewrite會從URI中刪除前綴(前導斜槓)。您的正則表達式需要刪除它:

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

乾杯喬恩,我甚至沒有看到。現在所有的作品,除了正則表達式實際上是'([^ /] *)的事實對我而言,因爲我需要它包含一段時間。除此之外,謝謝你。 :) – 2012-04-01 01:03:59

0

這應該工作:需要在阿帕奇1.x中

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

領先斜線和2.x版 也被否定了點字符剝離。