配置 httpd.conf 以使用多个脚本处理通配符域

配置 httpd.conf 以使用多个脚本处理通配符域

我有一个完整的网站,例如:

http://www.example.com (uses index.php)
http://www.example.com/scriptA.php
http://www.example.com/scriptB.php

我现在想能够设置如下子网站:

http://alpha.example.com
http://alpha.example.com/scriptA.php
http://alpha.example.com/scriptB.php

https://stackoverflow.com/questions/2844004/subdomain-url-rewriting-and-web-apps/2844033#2844033,我了解我必须做:

RewriteCond %{HTTP_HOST} ^([^./]+)\.example\.com$
RewriteCond %1 !=www
RewriteRule ^ index.php?domain=%1

但是其他脚本,比如 scriptA 和 scriptB 怎么办呢?我该如何告诉 httpd.conf 也正确处理这些脚本?

我怎样才能告诉 httpd.conf 该句柄一切在“正斜杠”之后,与主站点上完全相同,但传递一个参数标志,如

&domain=alpha

编辑1

...
I have lots of these subdomains being used, but I placed them _before_ the main 'www' one.
...

<VirtualHost IPADDRESS:80>
    ServerAlias test4.example.com
    ServerAdmin [email protected]
    DocumentRoot /home/test4/public_html
    ServerName test4.example.com
    UseCanonicalName On
</VirtualHost>



<VirtualHost IPADDRESS:80>
    ServerAlias *.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/beta
    ServerName example.com
    UseCanonicalName On

<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /opt/GeoLiteCity.dat IndexCache
</IfModule>    

 <IfModule mod_rewrite.c>
    RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,NC,L]

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC]
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^(.*)$   http://www.example.com%{REQUEST_URI}?domain=%1 [L]

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC]
RewriteCond %{QUERY_STRING}  !^$
RewriteRule ^(.*)$   http://www.example.com%{REQUEST_URI}?%{QUERY_STRING}&domain=%1 [L]

答案1

如果您希望所有这些 URL 都最终到达相同的 3 个脚本 - 正如我从您满页的数据中推测的那样 - 那么您不需要任何这些内容。

只需重写为相对的URI 改为:

RewriteCond %{HTTP_HOST} ^([^./]+)\.example\.com$
RewriteRule ^(.*\.php)$ $1?domain=%1 [QSA]

这对于任何 URL 都有效。

我怀疑你毫无理由地把事情搞得如此复杂——合理地结合虚拟主机和重定向将解决大多数问题,而无需复杂的重写。

相关内容