Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 将一个子域发送到子目录,将其他所有内容发送到带有参数的文件_Apache_Mod Rewrite_Redirect - Fatal编程技术网

Apache 将一个子域发送到子目录,将其他所有内容发送到带有参数的文件

Apache 将一个子域发送到子目录,将其他所有内容发送到带有参数的文件,apache,mod-rewrite,redirect,Apache,Mod Rewrite,Redirect,好家伙,我一整天都在为这件事挣扎 从子域重定向到作为参数传入子域的脚本文件可以正常工作 当一个特定的子域实际上是一个真正的文件夹(phpmyadmin)时,我似乎无法使它工作,至少在前面提到的规则中是这样 这是我的东西: <VirtualHost *.domain.com:443> ServerName *.domain.com ServerAlias *.domain.com DocumentRoot /home/domain/web RewriteEngine On Rewrit

好家伙,我一整天都在为这件事挣扎

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

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

ServerName*.domain.com
ServerAlias*.domain.com
DocumentRoot/home/domain/web
重新启动发动机
重写cond%{HTTP_HOST}^www.[NC]
重写cond%{HTTP\u HOST}^(phpmyadmin)\.domain\.com
重写cond%{REQUEST_URI}^phpmyadmin
重写规则^(.*)$/phpmyadmin[L]
重写cond%{HTTP\u HOST}^([^\.]+)\.domain\.com
重写规则^\/script2$/public/script2.php?参数1=%1[L]
重写cond%{HTTP\u HOST}^([^\.]+)\.domain\.com
重写规则^(.*)/public/script1.php?参数1=%1[L]
选项-索引包括noexec FollowSymLinks-多视图
允许超越所有
命令允许,拒绝
通融
斯伦金安
SSLCertificateFile/home/domain/crt
SSLCertificateKeyFile/home/domain/key
有什么想法吗?

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^(.*)$[L]

  • 与不使用首字母/的
    RewriteRule
    不同,
    RewriteCond%{REQUEST_URI}
    需要前面的斜杠,如下所示:

    RewriteCond%{REQUEST\u URI}^/phpmyadmin

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

    你也不需要

    RewriteCond%{HTTP\u HOST}^www.[NC]

    因为你的url永远不会以www开头,也不会以phpmyadmin开头。匹配

    RewriteCond%{HTTP\u HOST}^(phpmyadmin)\.domain\.com


    自动意味着非www匹配条件也为true

    也没有[R]标志,重定向规则将充当别名,这意味着phpmyadmin.domain.com在幕后以静默方式重定向到www.domain.com/phpmyadmin,但您的url不会更改。如果您确实希望在浏览器中看到url更改,请将[L]替换为[R=301,L](至少用于测试,因为当您可以看到重定向的方向时,它会更容易)