Masked重定向到root上的另一个文件夹

时间:2015-10-15 13:55:10

标签: .htaccess mod-rewrite redirect virtualhost

我有域www.domain.comwww.domain.com/data/photos/*.*中有图片。我想要的是,访问此图像(使用虚拟主机并屏蔽 - 即。我不希望更改网址,我希望拥有虚拟子网址网址),因为此网址为http://img.domain.com/*.*

我的主要网站位于/data/web/domain.com/web/*.*

可以在/data/web/domain.com/sub/*.*

中创建子域名

我试过这个,但它不起作用:

DocumentRoot /data/web/domain.com/sub
ServerName domain.com
ServerAlias img.domain.com
Alias /img /data/web/domain.com/web/data/photos

在SO上也试过了5个解决方案,但没有一个对我有用。 问题在哪里?

编辑:

这是我当前的虚拟主机设置:

DocumentRoot /data/web/domain.com/web
ServerName www.domain.com
ServerAlias domain.com
ServerAlias img.domain.com

我尝试将其添加到.htaccess文件:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^img.domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/data/photos/$1 [R,L]

它正在运行,但它正在更改网址,当我输入f.e http://img.domain.com/image.jpg时,它会在浏览器中更改为http://www.domain.com/data/photos/image.jpg

总之;我想在您输入http://img.domain.com/image.jpg时显示位于/data/web/domain.com/web/data/photos/image.jpg的文件内容。

如何防止更改网址?

1 个答案:

答案 0 :(得分:0)

您可以使用

RewriteRule "/(.*)\.(jpg|gif|png)$" "http://img.domain.com/$1.$2" [P]

而不是:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^img.domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/data/photos/$1 [R,L]

根据apache RewriteRule documentation

注意:必须启用 mod_proxy 才能使用此标记。

<强> EDITED

我找到了解决方案! 试试这个:

RewriteCond %{ENV:REDIRECT_FINISH} !^$
RewriteRule ^ - [L]
RewriteCond %{HTTP_HOST} ^img.domain.com$ [NC]
RewriteRule ^(.*)$ /data/photos/$1 [L,E=FINISH:1]

前两行可帮助您防止无限循环。