屏蔽重定向到根目录下的另一个文件夹
Masked redirect to another folder over root
我有域 www.domain.com
,www.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]
前两行帮助您防止无限循环。
我有域 www.domain.com
,www.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]
前两行帮助您防止无限循环。