带.htaccess或PHP的动态子域页面

时间:2017-07-18 01:14:28

标签: php apache .htaccess ubuntu subdomain

我的目录是这样的:

  • /index.php(网站主页)
  • /位点
    • 站点1
    • 站点2
    • site3
  1. 当我转到site1.example.com时,我希望它显示example.com/sites/site1/index.php

  2. 当我转到site1.example.com/page1时,我希望它显示文件example.com/sites/site1/page1.php

  3. 我该怎么做?谢谢!

2 个答案:

答案 0 :(得分:2)

我假设您的所有子域都指向与主域相同的位置,因此subdomain.example.comexample.com指向同一位置。

在主站点根目录的.htaccess文件中尝试以下内容:

RewriteEngine On

# Exclude requests for the www subdomain
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ - [L]

# Requests for the site root
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC]
RewriteRule ^$ sites/%1/index.php [L]

# Requests that are "assumed" to be .php files
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC]
RewriteRule ^([^.]*)$ sites/%1/$1.php [L]

# All other requests
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com [NC]
RewriteRule !^sites/ sites/%1%{REQUEST_URI} [L]

这假设有效的URL路径不包含点。

%1是对 CondPattern 中捕获的组的反向引用(即子域),而$1是对捕获的反向引用RewriteRule 模式中的组

但是,您希望如何处理非PHP文件和其他静态资源?

  

另外,我该如何进行404页面?

您可以定义自定义错误文档。例如:

ErrorDocument 404 /errors/404.php

但是,您需要在.htaccess文件的顶部进行例外处理,以防止被后续指令重写。例如:

RewriteRule ^errors/ - [L]

答案 1 :(得分:0)

你需要:

  1. 设置Wildcard DNS record
  2. 为.htaccess写一条规则
  3. 规则可能如下:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(.*)\.example\.com
    RewriteRule ^(.*)$ http://example.com/sites/%1/$1 [L,NC,QSA]
    

    就是这样。