Hoo-boy我整天都在为这一天苦苦挣扎。
从子域重定向到子域名作为参数传入的子域名工作正常。
当一个特定的子域实际上是一个真正的文件夹(phpmyadmin)时,我似乎无法使其工作,至少不能使用前面提到的规则。
这是我的东西:
<VirtualHost *.domain.com:443>
ServerName *.domain.com
ServerAlias *.domain.com
DocumentRoot /home/domain/web
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.* [NC]
RewriteCond %{HTTP_HOST} ^(phpmyadmin)\.domain\.com
RewriteCond %{REQUEST_URI} !^phpmyadmin
RewriteRule ^(.*)$ /phpmyadmin [L]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com
RewriteRule ^\/script2$ /public/script2.php?param1=%1 [L]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com
RewriteRule ^(.*) /public/script1.php?param1=%1 [L]
<Directory /home/domain/web>
Options -Indexes IncludesNOEXEC FollowSymLinks -MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCertificateFile /home/domain/crt
SSLCertificateKeyFile /home/domain/key
</VirtualHost>
有什么想法吗?
答案 0 :(得分:1)
2个问题:
RewriteCond %{HTTP_HOST} !^www.* [NC]
RewriteCond %{HTTP_HOST} ^(phpmyadmin)\.domain\.com
RewriteCond %{REQUEST_URI} !^phpmyadmin
RewriteRule ^(.*)$ /phpmyadmin [L]
在目标重定向中,您不会更改域。只需使用/ phpmyadmin,您就不会指向 www.domain.com/phpmyadmin ,而是指向 phpmyadmin.domain.com/phpmyadmin ,这很可能导致无限重定向循环,因为它将保持匹配每个重定向的phpmyadmin子域。使用:
RewriteRule ^(.*)$ http://www.domain.com/phpmyadmin [L]
与初始/未使用的RewriteRule
不同,RewriteCond %{REQUEST_URI}
确实需要这样的前导斜杠:
RewriteCond %{REQUEST_URI} !^/phpmyadmin
未能这样做意味着它与定向/ phpmyadmin不匹配,导致另一个潜在的自匹配无限重定向循环。
你也不需要
RewriteCond %{HTTP_HOST} !^www. [NC]
因为您的网址永远不会以www开头,也会以phpmyadmin开头。匹配
RewriteCond %{HTTP_HOST} ^(phpmyadmin)\.domain\.com
自动暗示NOT www匹配条件也是如此