我需要使用 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,但我明白这可能会在引擎中造成一些怪异现象。