簡體   English   中英

mod_rewrite httpd.conf:禁止訪問HTTP_REFERER上的目錄

[英]mod_rewrite httpd.conf: Block access to directories on HTTP_REFERER

我正在(學習)實現前端控制器模式,將所有請求重定向到index.php,並通過以下httpd.conf中的mod_rewrite規則作為查詢字符串(稍后由PHP解析)附加:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [NC,L]

問題1:這還會重定向所需的現有文件,例如domain.com/css/main.css !-d!-f應避免這種情況?

問題2:我想阻止訪問(403)到特定的目錄及其內容- domain.com/css/*domain.com/js/* ,等等-除非請求來自domain.com

解釋

我有以下規則來阻止基於HTTP_REFERER請求(來自博客,找不到鏈接...),該規則本身會阻止所有用戶請求:

RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.*
RewriteRule ^.*$ - [F]

我想添加另一個條件,檢查REQUEST_URI是否用於那些目錄中的任何內容,但是在使其工作時遇到了麻煩。 如果我添加以下內容:

RewriteCond %{REQUEST_URI} /?.*(css|js)/?.* [NC]

然后一切都被重定向; 沒有它, 一切都會被阻塞。 因此,完整的mod_rewrite集如下所示:

RewriteCond %{REQUEST_URI} /?.*(css|js)/?.* [NC]
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.*
RewriteRule ^.*$ - [F]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [NC,L]

任何幫助將不勝感激; 我整天都在尋找答案。

問題1:這還會重定向所需的現有文件,例如domain.com/css/main.css !-d!-f應避免這種情況?

可以,但是mod_rewrite可能沒有正確的上下文。 服務器配置中的重寫規則的行為與htaccess文件中的行為略有不同。 嘗試將規則放在<Directory>容器中:

<Directory "/path/to/your/docuemntroot">

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php/$1 [NC,L]

</Directory>

對於問題2,您只需將正則表達式添加到規則本身即可:

RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.*
RewriteRule \.(css|js)$ - [F,L,NC]

並確保使用L標志來防止應用第二條規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM