【问题标题】:Apache .htaccess mod_rewrite RewriteCond ProblemApache .htaccess mod_rewrite RewriteCond 问题
【发布时间】:2011-03-09 06:08:25
【问题描述】:

我正在尝试让 RewriteCond/RewriteRule 对工作,这会导致 404 错误,除非我取消注释 RewriteCond,在这种情况下,所有内容都会被重定向。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /path/
RewriteCond /var/www/site/downloads/$1 -F
RewriteRule ^(.+)$ getdownload.php [L]
</IfModule>

想法是,如果文件存在于下载目录中,则将用户发送到 getdownload.php 脚本,假设他们有权限,该脚本会分发下载。

关于为什么这会失败的任何想法?

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:
    RewriteCond %{SCRIPT_FILENAME} -f
    RewriteRule path/downloads/(.*) path/downloads/getdownload.php? [L]
    

    仍然在 URL 中显示 downloads/index.php,但提供 /downloads/getdownload.php 内容,并确保它是一个文件。 (注意:我的 .htaccess 文件位于我的测试站点的顶层。)

    如果你想把它放到/downloads/,你可以从规则的两边删除“path/downloads/”。

    【讨论】:

    • 这似乎与我需要的相反——我需要该文件不存在,而是存在于下载目录中,在这种情况下,脚本 getdownload.php(不在下载中)是重写为。
    • 如果我理解正确,那么您需要做的就是从规则的最后部分删除 /downloads/。此时 Apache 应该说,“访问者正在请求 path/downloads/ 中的文件(存在),因此我会将它们指向 path/getdownload.php”。无论是否使用上述条件,如果 /downloads/ 中不存在该文件,您将得到 404。通过添加 Cond,只有在 /downloads/ 中确实存在文件时才会触发规则 - 基本上杀死页面会更快地调用一个脚本。
    • RewriteRule path/downloads/(.*) path/getdownload.php? [L]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2011-09-30
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多