使用.htaccess从子域提供根域内容

时间:2013-08-28 10:46:48

标签: apache .htaccess mod-rewrite

我有一个PHP应用程序,需要将域的文档根目录设置为/(wherever)/app_dir/www才能成功运行(遗憾的是无法更改)。不幸的是,在我的主机上,我无法更改主mydomain.com的文档根目录(从/public_html/public_html/app_dir/www,但我可以编辑子域名的文档根目录。

子域名存储在/public_html/subdomain.domain.com中,将子域名的根目录设置为/public_html/subdomain.domain.com/app_dir/www可让应用在http://subdomain.domain.com/处显示其内容。

为了让它的内容出现在根域(我无法安装它,因为文档根目录是不可编辑的),我正在尝试使用.htaccess从子域提供内容而不重定向浏览器,所以要去到www.domain.com会在地理位置栏中显示www.domain.com,但实际上正在提供subdomain.domain.com的内容(同样地www.domain.com/something来自subdomain.domain.com/something)。< / p>

据我了解,mod_proxy应该能够(并且已安装)。根据类似查询的其他SO答案,这看起来应该是解决方案:

RewriteEngine On
RewriteRule ^(www.)?domain\.com$ http://subdomain.domain.com/$1 [L,P]

我一直在尝试用一个简单的index.html虚拟代替任何更复杂的东西,但要么我的语法都关闭了(我尝试了几种变化,没有快乐,包括没有P选项;我不是专家和我以前的.htaccess经验仅限于简单的重写和301重定向),我错过了一些令人眼花缭乱的事情,或者我完全咆哮错误的树,因为我只是得到了我在那里得到的虚拟索引文件根域而不是位于子域根目录中的同样虚拟索引文件(如果你转到subdomain.domain.com,它会显示正常,但这不是目标)。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

这条规则是错误的,有错误的,它不会做你认为它应该做的事情:

RewriteRule ^(www.)?domain\.com$ http://subdomain.domain.com/$1 [L,P]

请记住RewriteRule仅匹配没有域和查询字符串部分的REQUEST_URI

如果启用了mod_proxy,则可以改为使用此规则:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^ http://subdomain.domain.com%{REQUEST_URI} [P,L]

如果由于某些原因没有启用mod_proxy,请告诉我,我会建议另一种解决方案。