Apache-2.2
Apache 配置 - 所有虛擬主機的重寫規則
我的 Apache 上有 2 個虛擬主機的以下配置:www.domain.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”)可以從所有虛擬主機自由訪問(= 無需身份驗證),而無需複制程式碼。
- 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/ … 的呼叫仍然受到基本身份驗證的限制。
我得到了它!
缺少RewriteBase。儘管在第一個域的配置中不是強制性的,但在第二種情況下是必須的!
我還設法使其適用於在伺服器級別移動“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 的觸發器;)
滿足。Require 文件中也詳細說明了您的特定需求。
<Directory "/website/res/api"> Satisfy Any Allow from all </Directory>
然後,您將需要在 res.domain.com 虛擬主機上複製任何重寫規則。如果您希望從中傳遞相同的內容,
res.domain.com
您可能需要為您的目錄的路徑設置別名。res.domain.com/api``/website/www/api