我有两个域名 - domain.com 和 forum.domain.com,它们指向同一个目录。
我想将所有请求从 forum.domain.com 重定向到 domain.com(例如:forum.domain.com/foo 到 domain.com/forum/foo)而不更改地址栏中的地址(隐藏重定向)。
我写了类似这样的内容并将其放入 .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]
这仅当我添加重定向指令时才有效:
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
现在,我创建了两个虚拟主机:
<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>
..以及名为“foo”的目录,我在里面放了两个文件:.htaccess 和 index.php。
索引.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]
当我输入地址时http://forum.foo.net/test在地址栏中显示/论坛/测试这很好。http://foo.net/a/b/c节目/a/b/c这很好。但! http://forum.foo.net/显示空值(应该显示/论坛)。
答案1
启用 mod_proxy 并使用P
标志。