Apacheconfiguration – 重写所有虚拟主机的规则

我有我的Apache上的2个虚拟主机的以下configurationwww.domain.comres.domain.com 。 第一个是开放第二个是仅限注册用户。

<VirtualHost *:80> ServerName www.domain.com DocumentRoot /website/www <Directory "/website/www"> Options FollowSymLinks AllowOverride All RewriteEngine On RewriteCond %{REQUEST_URI} !api/dispatch\.php$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^api/.*$ api/dispatch.php [L,QSA] </Directory> </VirtualHost> <VirtualHost *:80> ServerName res.domain.com DocumentRoot /website/res <Directory "/website/res"> Options FollowSymLinks AllowOverride All AuthType Basic AuthUserFile /website/res/users.sec <Limit GET POST> Require valid-user </Limit> </Directory> </VirtualHost> 

我想所有的电话http://res.domain.com/api/ *完全一样,如果他们是http://www.domain.com/api/ *。 没有authentication和相同的行为…

重要提示 :我不希望我的用户看到redirect

我需要帮助,因为我尝试了很多东西,但没有成功。

编辑1这里的想法是有一个网站的一部分(在这种情况下'api'),可以从所有的虚拟主机免费访问(=没有身份validation),而无需复制代码。

  • http://www.domain.com/api/ …
  • http://res.domain.com/api/ …

文件夹:

    /网站
      /万维网
        / IMG
        / API
        / CSS
        / ...
      / RES
        / ...

我已经试过将Alias,RewriteRule和Directory结合起来…例如:

 <VirtualHost *:80> ServerName www.domain.com DocumentRoot /website/www <Directory "/website/www"> Options FollowSymLinks AllowOverride All RewriteEngine On RewriteCond %{REQUEST_URI} !api/dispatch\.php$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^api/.*$ api/dispatch.php [L,QSA] </Directory> </VirtualHost> <VirtualHost *:80> ServerName res.domain.com DocumentRoot /website/res Alias /api /website/www/api <Directory "/website/www/api"> Options FollowSymLinks AllowOverride All Satisfy Any Allow from all RewriteEngine On RewriteCond %{REQUEST_URI} !dispatch\.php$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*$ dispatch.php [L,QSA] </Directory> <Directory "/website/res"> Options FollowSymLinks AllowOverride All AuthType Basic AuthUserFile /website/res/users.sec <Limit GET POST> Require valid-user </Limit> </Directory> </VirtualHost> 

在这种情况下,对http://res.domain.com/api/ …的调用仍然受到基本身份validation的限制。

满意 。 您的具体需求也在需求文档中详细介绍。

  <Directory "/website/res/api"> Satisfy Any Allow from all </Directory> 

然后,您需要复制res.domain.com虚拟主机上的任何重写规则。 如果您希望从res.domain.com传递相同的内容,则可能需要将res.domain.com/apipath别名至您的/website/www/api目录。

我知道了!

RewriteBase丢失。 尽pipe在第一个域的configuration中不是必须的,但是在第二个域中!

我还设法使其适用于在服务器级别移动“api”目录configuration的任何虚拟主机。 它给:

 # API Accessible from all domains Alias /api /website/www/api <Directory "/website/www/api"> Options FollowSymLinks AllowOverride None Satisfy Any Allow from all RewriteEngine On RewriteBase /api/ RewriteCond %{REQUEST_URI} !dispatch\.php$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*$ dispatch.php [L,QSA] </Directory> # Virtual hosts <VirtualHost *:80> ServerName www.domain.com DocumentRoot /website/www <Directory "/website/www"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *:80> ServerName res.domain.com DocumentRoot /website/res <Directory "/website/res"> Options FollowSymLinks AllowOverride All AuthType Basic AuthUserFile /website/res/users.sec <Limit GET POST> Require valid-user </Limit> </Directory> </VirtualHost> 

感谢@mindthemonkey的触发器;)