繁体   English   中英

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

[英]Wildcard redirect from subdomain root folder to subdomain subfolder

因此,我最近将子域上的所有文件分类到了不同的文件夹中,我们将其upload.example.org 新文件夹之一名为“ img”( public_html/upload/img ),我现在在其中自动上传自己拍摄的所有照片,以方便共享。 以前,所有图像都位于文档根文件夹“上载”中,这是我用来共享URL的位置,因此需要重定向到新URL以避免破坏任何内容。

现在,我一直在尝试创建一个.htaccess,它将人们从upload.example.org/image.jpg重定向到upload.example.org/img/image.jpg image.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替换为R=301

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM