通配符从子域根文件夹重定向到子域子文件夹



所以我最近把子域上的所有文件都分类到不同的文件夹中,我们称之为upload.example.org。其中一个新文件夹名为"img"(public_html/upload/img),我现在可以自动上传我拍摄的任何照片,以便共享。以前,所有的图像都在文档根文件夹"上传"中,我曾经在那里共享URL,所以需要重定向到新的URL,以避免破坏任何内容。

现在,我一直在尝试创建一个.htaccess,将人员从upload.example.org/image.jpg重定向到upload.example.org/img/image.jpgimage.jpg可以替换为img文件夹中的任何其他文件名。

在寻找答案时,我发现:

RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

将这行代码与我的子域一起使用会导致一个循环,最终将我重定向到http://upload.example.org/img/img/img/img/img/img/img/img/img/img/image.jpg

在搜索并尝试了不同的.htaccess变体后,我找不到正确的解决方案。

如果您能提供任何帮助,我们将不胜感激!:)

循环的原因是因为重定向后,客户端请求新的URL,而这个新的URL又被重定向,导致客户端发出新的请求,然后再次重定向,依此类推。。。

为了避免这种情况,您必须在规则前面加上停止条件,例如

RewriteRule ^img/ - [L]

如果请求的URL已经以img/开头,则会导致退出重写链。


另一种方法是首先测试img文件夹中是否存在适当的文件,如果存在,则仅重定向。

RewriteCond /img/$1 -f
RewriteRule ^(.*)$ ^img/$1 [R,L]

如果您想从任何重写中排除文件夹,请使用上面示例中的停止条件规则

RewriteRule ^path/to/some/folder - [L]

这确保了以给定URL路径开头的任何请求都会被重写或重定向。

如果您只想从img规则中获得一个异常,您可以向该规则添加另一个条件,该条件检查结果路径是否在该其他文件夹中,例如

RewriteCond /img/$1 -f
RewriteCond /img/excluded/folder/$1 !-f
RewriteRule ^(.*)$ ^img/$1 [R,L]

这些条件首先检查图像是否存在于img子文件夹中的某个位置,然后确保它不是img/excluded/folder中的文件。


不相关,但从未R=301测试!当一切正常时,可以用R=301替换R

最新更新