2012-04-01 46 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版 也被否定了点字符剥离。