加载子域,将其从URL隐藏

时间:2014-07-18 16:02:30

标签: php apache .htaccess mod-rewrite redirect

我的网站设置如下:

public_html >
/prod/ (http://prod.domain.com)
/test/ (http://test.domain.com)
/dev/ (http://dev.domain.com)

用于生产,测试和开发环境。

使用htaccess,http://domain.com的所有流量都会重写为http://prod.domain.com,但不会重定向(以便地址栏中仍然可以看到http://domain.com)。

问题是,网站上的相对内容,例如指向" ../../ contact"的链接现在打开http://prod.domain.com/contact,而不是http://domain.com/contact

有没有办法,真正隐藏这个" prod"来自网址的子域名?例如,如果请求http://domain.com,请将用户重定向到http://prod.domain.com,并仍然将其重写为http://prod.domain.com

我的htaccess:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

## Set environment
SetEnvIfNoCase HOST ^test\. WP_ENV=testing
SetEnvIfNoCase HOST ^dev\. WP_ENV=development
SetEnvIfNoCase HOST ^acc\. WP_ENV=production
SetEnvIfNoCase HOST (^prod\.|^www\.|^([^\.]+)\.([^\.]+)$) WP_ENV=production NO_AUTH=1

## Require HTTP auth for test
AuthType Basic
AuthName "TESTING"
AuthUserFile "/path/to/htpasswd/hello"
Order Deny,Allow
Deny from all
Satisfy any
Allow from localhost
Allow from 127.0.0.1
Require valid-user
Allow from env=NO_AUTH

## Excludes
RewriteRule ^(test)($|/) - [L]

## Remove www
RewriteCond %{HTTP_HOST} ^(www.*)$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [QSA,R=301,L]

## Redirect Old Domain to New Domain
RewriteCond %{HTTP_HOST} ^olddomain.org$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.org$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

## Deliver production
RewriteRule ^(.*)$ http://prod.domain.com/$1 [P,L]

不幸的是我们在共享主机上,因此无法访问cmd!

1 个答案:

答案 0 :(得分:0)

您可以使用符号链接:

ln -s /public_html/prod /public_html

如果您想从主域访问dev文件,可以简单地更改符号链接。

其他例子:

ln -s "prod" <- "main"

mklink "main" -> "prod"