【问题标题】:filtering REQUEST_FILENAME in mod_rewrite for RewriteCond为 RewriteCond 过滤 mod_rewrite 中的 REQUEST_FILENAME
【发布时间】:2011-03-29 05:36:50
【问题描述】:

首先,一个简单的问题。如果无法做到这一点,我会发布一个问题以寻求替代解决方案。

简而言之,我需要一些方法来构建过滤文件路径以供 RewriteCond 检查。

比如我想用这个url:/images/photos/gallery/beach.jpg/unique-identifier.jpg/width:50;height:50来检查这个文件:/images/__resized/photos/gallery/beach.jpg/unique-indentifier.jpg是否存在。

为了让事情变得更复杂,如果找不到这个图像文件,我需要将完整的 url 传递给一个调整大小的脚本,该脚本生成调整大小的图像,最后发送一个指向完整 url 的重定向标头。

如果您需要更多详细信息,请询问。我故意遗漏了一些,因为英语不是我的第一语言,我觉得添加更多细节会让我更难理解我想要做什么:)

【问题讨论】:

    标签: mod-rewrite url-rewriting apache2


    【解决方案1】:

    首先,此规则将检查文件名是否采用您的特定格式。然后检查文件是否存在(添加 __resized 并省略最后一部分)。如果它不存在那么它将调用resizer.php:

    RewriteCond %{REQUEST_URI} ^images/(.*)/width:[0-9]+;height:[0-9]+
    RewriteCond %{DOCUMENT_ROOT}/images/__resized/%1 !-f
    RewriteRule (.*) resizer.php
    

    不需要给调整器脚本提供任何GET参数,因为它可以访问$_SERVER['REQUEST_URI']中的原始URL

    你没有明确提到,但我猜如果这样的文件存在,那么你想把它发送给用户。

    RewriteCond %{REQUEST_URI} ^images/(.*)/width:[0-9]+;height:[0-9]+
    RewriteCond %{DOCUMENT_ROOT}/images/__resized/%1 -f
    RewriteRule (.*) /images/__resized/%1
    

    【讨论】:

    • 感谢您的快速回答。虽然没有解决我的问题,但让我意识到我的思路完全错了:)
    • @Pichan 总是很乐意提供帮助 :) 虽然,您可以为尝试相同事情的其他人发布类似“问题无法以这种方式解决,因为......”的答案。只是一个想法。
    • 我明天再做。现在是 3 点 26 分,我还在办公室处理这个问题。剩下的唯一问题似乎是我无法像使用 RewriteRule (.*) 那样将请求的文件相对于当前目录的 RewriteCond 获取到
    • @Pichan 你可以使用%{REQUEST_URI},它是相对于当前目录的(如果你使用的是.htaccess)。
    • 我正在使用 .htaccess${REQUEST_URI} 似乎与文档根目录相关。我在 ubuntu 10.10 上使用 apache2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多