Mod-Rewrite

配置 httpd.conf 以使用 multiple 腳本處理萬用字元域

  • July 24, 2012

我有一個成熟的網站,例如:

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 me@me.com
   DocumentRoot /home/test4/public_html
   ServerName test4.example.com
   UseCanonicalName On
</VirtualHost>



<VirtualHost IPADDRESS:80>
   ServerAlias *.example.com
   ServerAdmin me@me.com
   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]

如果您希望所有這些 URL 都以相同的 3 個腳本結束——正如我從你的頁面中推測的那樣——那麼你不需要任何這些東西。

只需改寫為相對URI:

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

這適用於任何 URL。

我懷疑你無緣無故地讓事情變得非常複雜 - 虛擬主機和重定向的明智組合將解決大多數問題,而無需複雜的重寫。

引用自:https://serverfault.com/questions/408805