我的 Apache 上有 2 个虚拟主机,配置如下:www.域名.com和res.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/*. 无需身份验证,行为相同...
重要的:我不想让我的用户看到重定向……
我需要帮助,因为我尝试了很多方法但都没有成功。
编辑1 这里的想法是让网站的一部分(在本例中为“api”)可以从所有虚拟主机自由访问(无需身份验证),而无需复制代码。
文件夹:
/网站 /万维网 /图片 /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/... 仍然受到基本身份验证的限制。
答案1
答案2
我得到了它!
重写库缺失。尽管在第一个域的配置中它不是强制性的,但在第二个域中它是强制性的!
我还设法使其适用于在服务器级别移动“api”目录配置的任何虚拟主机。它提供:
# 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 的触发;)