我的目录是这样的:
当我转到site1.example.com
时,我希望它显示example.com/sites/site1/index.php
当我转到site1.example.com/page1
时,我希望它显示文件example.com/sites/site1/page1.php
我该怎么做?谢谢!
答案 0 :(得分:2)
我假设您的所有子域都指向与主域相同的位置,因此subdomain.example.com
和example.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)
你需要:
规则可能如下:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com
RewriteRule ^(.*)$ http://example.com/sites/%1/$1 [L,NC,QSA]
就是这样。