RewriteRule 仅当文件夹不存在时才有效

RewriteRule 仅当文件夹不存在时才有效

我需要使用 RewriteRule 重定向一组图像以便通过脚本进行访问,而不是直接访问图像。

为此使用了 RewriteRule:

RewriteRule ^Images/test/([^.\/]*)\.png /image.php?file=$1.png [R=301,L]

我希望这种情况会改变:

www.example.com/图片/测试/123.png

进入

www.example.com/image.php?file=123.png

但它并没有这么做。

但是如果我将 RewriteRule 更改为以下内容:

RewriteRule ^Images2/test/([^.\/]*)\.png /image.php?file=$1.png [R=301,L]

以下工作:

www.example.com/图片2/测试/123.png

进入

www.example.com/image.php?file=123.png

区别在于 Images 存在而 Images2 不存在。它是否可以使用现有文件夹。

关于如何使顶部示例正常运行,有什么帮助吗?

更新:仔细查看后mod_rewrite 文档, 我找到了这个:

...请注意,mod_rewrite 会尝试猜测您是否指定了文件系统路径或 URL 路径,方法是检查路径的第一段是否存在于文件系统的根目录中...

看起来,如果将路径解释为 URL 路径,它就会起作用,如果将其解释为文件系统路径,它就会失败。

答案1

尝试一下

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$0 [L]

运气!!

答案2

尝试将锚点的开头改为^/,这只是我的直觉。我个人没有使用过锚定在不以斜线开头的行首的 RewriteRules,但我明白这可能会在引擎中造成一些怪异现象。

相关内容