mod_rewrite意外执行

时间:2012-04-01 00:45:29

标签: regex apache .htaccess mod-rewrite

无论我多少次谷歌或想一想,我都无法想出这一点。我的.htaccess文件中有一个RewriteRule:RewriteRule ^/download/([^/\.])/?$ /downloadfile.php?f=$1 [L]

当我使用它时,我的页面加载正常,但转到链接http://www.example.com/download/file.ext,它会提取404页面。但是,如果我加载页面,然后将我的RewriteRule更改为RewriteRule ^/download/([^/\])/?$ /downloadfile.php?f=$1 [L](注意RegEx更改),链接完全符合我的预期...直到我重新加载页面,这导致500错误,因为一个坏的正则表达式? (我检查了我的Apache错误日志,这就是我怎么知道它看起来像一个糟糕的正则表达式)

那么,我该怎么做才能做到这一点?我也尝试了(.*)([.*])用于正则表达式,这也没用。有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:1)

当您在.htaccess文件中使用它时,mod_rewrite会从URI中删除前缀(前导斜杠)。你的正则表达式需要删除它:

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

答案 1 :(得分:0)

这应该有效:

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

apache 1.x中需要前导斜杠,并在版本2.x中剥离 你也在否认点角色。