【问题标题】:RewriteRule do THIS if image file, or else do THAT如果图像文件,RewriteRule 执行此操作,否则执行此操作
【发布时间】:2013-01-19 13:14:23
【问题描述】:

我很难让这个工作.. 我已经安装了 YOURLS,它是一个用于缩短 url 的 PHP 脚本。 为了工作,它需要有这个:

            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ /yourls-loader.php [L]

这里没问题。 但我也想使用与 PHP 脚本无关的图像托管目录。 它会检查请求的 url 是否以 .jpg|.jpeg|.gif|.png 结尾,并且 RewriteRule 会重定向到 /imgshare/$1 我已经尝试了下面的代码,但是在访问 mysite.com/img.jpg 时出现服务器错误,但对于 url 重定向“mysite.com/y4Jd”却没有:

    RewriteCond %{REQUEST_URI} !(\.jpg|\.jpeg|\.gif|\.png)$ [NC]
    RewriteRule ^(.*)$ /yourls-loader.php [L]
    RewriteCond %{REQUEST_URI} (\.jpg|\.jpeg|\.gif|\.png)$ [NC]
    RewriteRule ^(.*\.(jpeg|jpg|png|gif))$ /imgshare/$1 [L]

【问题讨论】:

标签: .htaccess mod-rewrite rewrite yourls


【解决方案1】:

这不是问题,但请注意,您的第二个 RewriteCond 已经匹配具有图像结尾的文件,因此无需在 RewriteRule 中重复该匹配。或者,不需要 RewriteCond,因为它对 RewriteRule 是多余的。

然而,真正的问题可能是您在最终规则中有一个额外的斜线。 $1 将包含与原始 URL 匹配的前导斜杠,因此您的规则当前在 imgshare 和文件名之间添加两个斜杠。我会像这样执行规则:

RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png)$ [NC]
RewriteRule ^(.*)$ /imgshare$1 [L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2021-02-10
    • 2023-03-09
    • 2014-02-17
    • 2016-05-17
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多