将任何子域和所有文件重写为单个目录

时间:2014-07-23 09:43:15

标签: .htaccess mod-rewrite

当用户访问我网站的任何子域名时,例如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做到这一点有任何想法?提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试将此添加到您的网络文档根文件夹中的.htaccess文件中(通常为public_htmlhtdocs):

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.confAllowOverride 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文件,并稍稍调整了一下。

我希望这有助于将来的某个人!