我正在尝试将旧域重定向到新的子域,同时尝试使旧域在浏览器的地址栏中可见。
我使用 htaccess 来做到这一点,除了在地址栏中保持旧域可见之外,一切正常。
另一件重要的事情是需要维护 url 和 GET 变量中的文件夹。
我正在尝试通过 htaccess 优雅地完成所有这些工作,因为我不想使用 i-frame 来完成此操作。
这是我到目前为止一直在使用的代码。它可以工作,除了在浏览器的地址栏中维护旧域名。
我的问题是,重定向后如何在浏览器的地址栏中继续显示旧域名?我在某处读到这可以通过所谓的“代理内容”来完成,但我可能错了。我也不知道它是如何工作的。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^domain.com [nc]
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L]
RewriteCond %{HTTP_HOST} ^www.domain.com [nc]
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
更新:
好的,所以我更进一步。当我将网站文件放在根目录的子目录中时,以下代码有效。
但是,它仍然存在问题。虽然它确实将 example.com 重定向到 example.com/subdirectory,但它不会将 example.com/index.php 重定向到 example.com/subdirectory/index.php。
我仍在试图弄清楚如何做到这一点,以便它适用于所有文件,包括 index.php。
#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the browser address bar.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]
RewriteCond %{HTTP_HOST} ^www.example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
再来一注。由于我网站中的所有元素都使用相对路径,因此我还必须将 HTML 根目录设置为子目录以使事情正常进行,因为由于重写,网站 HTML 中的相对路径正在查看错误的文件根目录. 也就是说,它们链接到实际的根目录,而不是子目录。我将 html root/base 设置为子目录,如下所示:
<head>
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" />
</head>
更新:
好的,所以我更进一步。当我将网站文件放在根目录的子目录中时,以下代码有效。
但是,它仍然存在问题。虽然它确实将 example.com 重定向到 example.com/subdirectory,但它不会将 example.com/index.php 重定向到 example.com/subdirectory/index.php。
我仍在试图弄清楚如何做到这一点,以便它适用于所有文件,包括 index.php。
#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the browser address bar.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]
RewriteCond %{HTTP_HOST} ^www.example.com [nc]
RewriteRule ^$ /subdirectory/ [nc,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
再来一注。由于我网站中的所有元素都使用相对路径,因此我还必须将 HTML 根目录设置为子目录以使事情正常进行,因为由于重写,网站 HTML 中的相对路径正在查看错误的文件根目录. 也就是说,它们链接到实际的根目录,而不是子目录。我将 html root/base 设置为子目录,如下所示:
<head>
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" />
</head>