我有我的服务器上的子子域(Debian上的Apache 2.2)的问题,我在/ etc / apache2 / sites-available中有这行:
RewriteRule ^(([^。/] +。)?site.com)/(。*)/www/site.com/www/root/$3 [L]
这行应该意味着每个子域或子子域(等等)必须redirect到上面的目录,在这个directroy我有一个.htaccess文件,它获取请求。
Everithing工作正常,当我键入site.com和subdomain.site.com,但问题来了,当我尝试使用像sub.subdomain.site.com(甚至www.subdomain.site.com)的子子域,它给我400错误的请求错误消息。 我试图redirectwww.subdomain.site.com .htaccess文件,但没有结果(它似乎甚至没有检查),我认为错误是在上面的重写规则,并没有正确的redirect请求到目录。
有人可以提出一个问题是什么?
编辑:这是整个虚拟主机configuration网站可用:
NameVirtualHost 1.2.3.4:80 NameVirtualHost 1.2.3.4:443 <VirtualHost 1.2.3.4:80> ServerName mysite.com ServerAdmin [email protected] DocumentRoot /www <Directory /> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log RewriteEngine On RewriteMap lowercase int:tolower RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C] RewriteRule ^(([^\.\/]+\.)?othersite1\.com)/(.*) /www/othersite1.com/www/root/$3 [L] RewriteRule ^(([^\.\/]+\.)?othersite2\.com)/(.*) /www/othersite2.com/www/root/$3 [L] RewriteRule ^(([^\.\/]+\.)?mysite.com)/(.*) /www/mysite.com/www/root/$3 [L] RewriteRule ^(([^\.\/]+\.)?othersite3\.com)/(.*) /www/othersite3.com/www/root/$3 [L] RewriteRule ^(([^\.\/]+\.)?othersite4\.com)/(.*) /www/othersite4.com/www/root/$3 [L] RewriteRule ^(([^\.\/]+\.)?[^\.\/]+\.[^\.\/]+)/(.*) /www/mysite.com/www/root/$3 [L] # RewriteMap lowercase int:tolower # RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C] # RewriteRule ^([^\.\/]+\.[^\.\/]+)/(.*) /www/$1/www/root/$2 # RewriteRule ^www\.([^\/]+)\.([^\.\/]+\.[^\.\/]+)/(.*) /www/$2/www/root/$3 # RewriteRule ^([^\/]+)\.([^\.\/]+\.[^\.\/]+)/(.*) /www/$2/www/root/$3 </VirtualHost> <VirtualHost 1.2.3.4:443> ServerName secure.mysite.com ServerAdmin [email protected] DocumentRoot /www <Directory /> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log SSLEngine on SSLCertificateFile /etc/ssl/certs/mysite/secure.mysite.com.crt SSLCertificateKeyFile /etc/ssl/certs/mysite/secure.mysite.com.key SSLCertificateChainFile /etc/ssl/certs/mysite/gd_bundle.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 RewriteEngine On RewriteMap lowercase int:tolower RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C] RewriteRule ^([^\.\/]+\.[^\.\/]+)/(.*) /www/$1/www/root/$2 RewriteRule ^www\.([^\/]+)\.([^\.\/]+\.[^\.\/]+)/(.*) /www/$2/www/root/$3 RewriteRule ^([^\/]+)\.([^\.\/]+\.[^\.\/]+)/(.*) /www/$2/www/root/$3 </VirtualHost>
有多个网站位于不同子域,每个人都有移动版本位于m.subdomain.mysite.com
好吧,我做了一些关于你的情况的testing,这里是工作结果(我不认为你现在使用的当前RewriteRules是正确的 – 这些在上面显示)。
所以这里是我testing的解决scheme。 示例1显示了重写fisrt级别子域(例如,subdomain.domain.com),示例2显示了重写第二级子域(例如,subdomain.subdomain.domain.com)。
这里是例子:例1:
1. RewriteEngine On 2. RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com 3. RewriteCond /var/www/html/%1 -d 4. RewriteRule ^(.*) /%1/$1 [L]
例2:
1. RewriteEngine On 2. RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.domain\.com 3. RewriteCond /var/www/html/%1/%2 -d 4. RewriteRule ^(.*) /%1/%2/$1 [L]
所以这里是上面给出的例子的结果:
防爆。 1 – 点击urltest.domain.com/index.php – >redirect到 – > /var/www/html/test/index.php
防爆。 2 – 点击链接1.2.domain.com/index.php – >redirect到 – > /var/www/html/1/2/index.php
我假设虚拟主机configuration了文件根目录 – / var / www / html
你确定,你的Apacheconfiguration正确,服务于所谓的子子域? 我的意思是,这些子域是预先configuration的,例如。 (sub-sub1,sub-sbu2..finite number,在vhost config中configuration),还是这些都是随机的子子域? 如果他们是随机的,我想你在vhost的configuration中有一些通配符?
——– ============= ———-
好吧,请尝试添加ServerAlias * .mysite.com ServerAlias * .othersite1.com ……. ServerAlias * .othersite [N] .com
在您的虚拟主机configuration
这听起来像是一个mod_vhost_alias工作,或者更简单的单独的基于名称的虚拟主机,具有适当的ServerAlias指令,这比使用mod_rewrite更容易维护。