0

哎呀,我整天都在为此苦苦挣扎。

从子域重定向到带有作为参数传入的子域的脚本文件可以正常工作。

当一个特定的子域实际上是一个真正的文件夹 (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>

有任何想法吗?

4

1 回答 1

1

2个问题:

RewriteCond %{HTTP_HOST} !^www.* [NC]
RewriteCond %{HTTP_HOST} ^(phpmyadmin)\.domain\.com
RewriteCond %{REQUEST_URI} !^phpmyadmin
RewriteRule ^(.*)$ /phpmyadmin [L]
  1. 在您的目标重定向中,您不会更改域。通过仅使用 /phpmyadmin,您不会指向www.domain.com/phpmyadmin,而是指向phpmyadmin.domain.com/phpmyadmin,这可能会导致无限重定向循环,因为它将继续匹配 phpmyadmin 子域每个重定向。采用:

    RewriteRule ^(.*)$ http://www.domain.com/phpmyadmin [L]

  2. RewriteRule不使用初始 / 的地方不同,RewriteCond %{REQUEST_URI}确实需要像这样的前导斜杠:

    RewriteCond %{REQUEST_URI} !^/phpmyadmin

不这样做意味着它与定向 /phpmyadmin 不匹配,从而导致另一个潜在的自匹配无限重定向循环。

你也不需要

RewriteCond %{HTTP_HOST} !^www. [NC]

因为您的网址永远不会以 www 开头,也不会以 phpmyadmin 开头。匹配

RewriteCond %{HTTP_HOST} ^(phpmyadmin)\.domain\.com

自动暗示 NOT www 匹配条件也为真

于 2012-12-04T09:19:16.330 回答