Mod-Rewrite
配置 httpd.conf 以使用 multiple 腳本處理萬用字元域
我有一個成熟的網站,例如:
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。
我懷疑你無緣無故地讓事情變得非常複雜 - 虛擬主機和重定向的明智組合將解決大多數問題,而無需複雜的重寫。