屏蔽重定向到根目录下的另一个文件夹

Masked redirect to another folder over root

我有域 www.domain.comwww.domain.com/data/photos/*.* 中有图像。我想要的是访问此图像(使用虚拟主机和屏蔽 - 即。我不想更改 url,我想要虚拟子域 url),因为 url 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 个解决方案,但 none 对我有用。 问题出在哪里?

已编辑:

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

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/ [R,L]

它正在工作,但它正在改变 url,当我输入 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.

中的文件内容

如何防止 URL 的这种变化?

您可以使用

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

而不是:

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

根据apache RewriteRule documentation

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

已编辑

我找到了解决办法! 试试这个:

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

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