我有两个域 – domain.com和forum.domain.com指向相同的目录。
我想redirect从forum.domain.com所有请求到domain.com(例如:forum.domain.com/foo到domain.com/forum/foo),而无需在地址栏(隐藏redirect)中更改地址。
我写了这样的东西,把它放到.htaccess文件中:
Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^forum\.example\.net$ RewriteRule (.*) http://example.com/forum/$1 [L] RewriteCond %{REQUEST_FILENAME} !-s [NC] RewriteCond %{REQUEST_FILENAME} !-d [NC] RewriteRule ^(.+) index.php/$1 [L]
这只适用于我添加redirect指令:
RewriteRule (.*) http://example.com/forum/$1 [R,L]
但它会改变地址栏中的以前的地址。
编辑:
好吧,让我们简单一点。 我在本地计算机的c:\ windows \ system32 \ drivers \ etc \ hosts的末尾添加了这两行:
127.0.0.3 foo.net 127.0.0.3 forum.foo.net
现在,我创build了两个虚拟主机:
<VirtualHost foo.net:80> ServerAdmin [email protected] ServerName foo.net DocumentRoot "C:/usr/src/foo" </VirtualHost> <VirtualHost forum.foo.net:80> ServerAdmin [email protected] ServerName forum.foo.net DocumentRoot "C:/usr/src/foo" </VirtualHost>
..和目录名为“富”,在那里我把两个文件:.htaccess和index.php。
index.php文件:
<?php echo $_SERVER['PATH_INFO']; ?>
的.htaccess:
Options +FollowSymlinks RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^forum\.foo\.net$ RewriteCond %{REQUEST_URI} !^/forum/ RewriteCond %{REQUEST_FILENAME} !-s [NC] RewriteCond %{REQUEST_FILENAME} !-d [NC] RewriteRule ^(.+)$ /index.php/forum/$1 [L] RewriteCond %{HTTP_HOST} !^forum\.foo\.net$ RewriteCond %{REQUEST_FILENAME} !-s [NC] RewriteCond %{REQUEST_FILENAME} !-d [NC] RewriteRule ^(.+) index.php/$1 [L]
当我在地址栏中input地址http://forum.foo.net/test时,显示/ forum / test这是很好的。 http://foo.net/a/b/c显示/ a / b / c哪个好。 但! http://forum.foo.net/显示空值(应显示/论坛 )。
启用mod_proxy并使用P标志。