重寫/限制apache中的特定域名
我們擁有
https://example1.com/login
並example2.com/login
託管在同一個 apache 伺服器 (2.2.22) 上。我想/login
限制example1.com
.
example1.com/login
–> 404(最好)或 403example2.com/login
–> 登錄頁面我試過
<Location /login> Order Deny,Allow Deny from example1.com Allow from example2.com </Location>
/login
它同時禁用example1.com
和example2.com
。我可以限制example1.com
嗎?
您可以使用 mod_rewrite 來執行此操作,它允許您檢查訪問站點的*主機。*在您的伺服器配置(或
<Directory>
部分或.htaccess
文件)中嘗試以下操作:RewriteEngine On RewriteCond %{HTTP_HOST} =example1.com [NC] RewriteRule ^/?login$ - [R=404,L]
如果您請求,上述服務將提供 404 Not Found,但如果您請求
example1.com/login
,則不會執行任何操作example2.com/login
(該請求將被允許通過)。CondPattern上的
=
前綴使其成為精確的字典比較,而不是正則表達式,因此無需轉義點或使用anchors。RewriteCond
為了提供 403 Forbidden,您可以更改 上的標誌
RewriteRule
,例如:RewriteRule ^/?login$ - [F]
<Location /login> Order Deny,Allow Deny from example1.com Allow from example2.com </Location>
/login
它同時禁用example1.com
和example2.com
。我很好奇……這似乎允許所有訪問,而不是拒絕它?該
Deny from ...
指令拒絕訪問使用者example1.com
(通過對遠端 IP 地址的反向 DNS 查找),而不是訪問example1.com
主機的使用者。Deny
or指令都不Allow
應該匹配,所以它應該預設Allow。(?)…如何為同一個 RewriteCond 添加多個重寫條件?
**更新:**請注意,
RewriteCond
指令(即條件)適用於RewriteRule
隨後的單個指令。繼續上面的範例,如果您希望僅阻止幾個 URL(例如/login
,/demo
和/test
),example1.com
那麼您可以將所有這些組合在RewriteRule
模式中。例如:RewriteCond %{HTTP_HOST} =example1.com [NC] RewriteRule ^/?(login|demo|test)$ - [R=404,L]
在這種情況下這是可以的,因為 URL 是有限的,而且都很短。或者,您可以為每個 URL 創建一個條件並使用該
OR
標誌。例如:RewriteCond %{HTTP_HOST} =example1.com [NC] RewriteCond %{REQUEST_URI} ^/login$ [OR] RewriteCond %{REQUEST_URI} ^/demo$ [OR] RewriteCond %{REQUEST_URI} ^/test$ RewriteRule ^ - [R=404,L]
這表明……對於所有的 URL,其中
HTTP_HOST
isexample1.com
和URL 要麼是要麼*,要麼*/login
然後 提供 404 錯誤文件。但是,第一個範例(使用模式)會更有效,因為這是首先處理的內容。/demo
/test``RewriteRule