当用户访问我网站的任何子域名时,例如test.domain.com甚至是sdjfhdihdfig.domain.com,我希望显示http://www.domain.com/directory的页面(无论用户去哪个子域,此目录都是相同的。)
如果用户转到任何子域的任何页面(例如,test.domain.com/apage.html),我希望显示http://www.domain.com/directory/[PAGE]的页面(在本例中为页面www。将显示domain.com/directory/apage.html,但当然这会根据子域之后的内容而发生变化。)
我找到了似乎可以解决这个问题的东西,但是,它会重定向用户,而不是保留URL栏中的子域。 如果我去test.domain.com/test,我希望此网址保持不变,但应该提供位于www.domain.com/directory/test的网页。
有没有人对如何使用htaccess做到这一点有任何想法?提前谢谢。
答案 0 :(得分:0)
尝试将此添加到您的网络文档根文件夹中的.htaccess
文件中(通常为public_html
或htdocs
):
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?!www)[^.]+\.domain\.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/directory/$1 [R,L]
如果您对重定向工作感到满意,可以将R
更改为R=301
以使其永久化。
这假设mod_rewrite 已为.htaccess
文件激活和。
如果您不确定,要检查是否安装了mod_rewrite,请查看phpinfo();
输出中已安装模块的列表
默认情况下,{_ 1}}文件未启用mod_rewrite。如果您要管理自己的服务器,请打开.htaccess
并确保webroot目录块包含以下行之一:httpd.conf
或AllowOverride FileInfo
答案 1 :(得分:0)
我最终找到了解决问题的方法。
这是我的.htaccess文件:
Options +FollowSymLinks
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?!www\.)?(.+)$
RewriteRule ^$ s/$1/ [L]
当有人访问example.domain.com时,会显示http://www.domain.com/s/处的页面。当他们转到example.domain.com/s/page.html这样的网页时,会显示http://www.domain.com/s/page.html处的页面。
如果用户访问 www .domain.com,则不会将其视为子域名,而是会显示我的主网站主页。
我已经设置了一个快速脚本,如果有人决定转到example.domain.com/page.html,而不是显示来自www.domain.com/page.html的页面,则会将其重定向到我服务器上的404页面。有关如何执行此操作的脚本(PHP)如下:
if(substr($_SERVER['HTTP_HOST'], 0, 4) != 'www.' AND substr($_SERVER['REQUEST_URI'], 0, 3) != '/s/' AND $_SERVER['REQUEST_URI'] != '' AND $_SERVER['REQUEST_URI'] != '/') {
header("Location: http://www.domain.com/404.php");
}
我从htaccess get domain name from %{HTTP_HOST} into variable, minus the www获得了htaccess文件,并稍稍调整了一下。
我希望这有助于将来的某个人!