Mod-Rewrite

在 conf-available 中配置伺服器範圍的 RewriteRule

  • July 6, 2015

最近我在我的網站日誌中收到了一些推薦人垃圾郵件。為了阻止這種情況(因為這很煩人並且還污染了我的統計數據),我想阻止來自某些引薦域的請求。可以找到很多文章建議將以下內容(或類似內容)放入網站的 .htaccess 文件中:

RewriteEngine On
RewriteCond %{HTTP_REFERER} example\.com [NC]
RewriteRule .* - [F]

這工作正常,但是,我想將其移至 Apache 配置,以便將此重寫規則應用於伺服器上託管的所有網站。我還讀到這對性能更好,因為必須為每個請求解析 .htaccess 文件,而 Apache 配置只載入一次。

我的伺服器在 Ubuntu 上執行,所以我創建了一個新的 .conf 文件:/etc/apache2/conf-available/block-referrer-spam.conf,其內容與上面的 .htaccess 片段完全相同。我在啟用 conf 的目錄中創建了一個符號連結(使用sudo a2enmod block-referer-spam)並重新載入了 Apache 配置(sudo service apache2 reload)。但是,與使用 .htaccess 時不同,Apache 不會阻止請求(返回 403)。

我想我可能會忽略一些簡單的事情,因此感謝您的幫助。

虛擬主機不會繼承重寫配置。為了“繼承” vHost 配置中的指令,每個 vHost 配置需要:

RewriteEngine on
RewriteOptions Inherit

請參閱 mod_rewrite 模組下的 Apache 討論:

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

在任何情況下,如果您可以訪問每個 vHost 的 site.conf 文件,您可能應該將這些用於“站點”指令,並且永遠不需要啟用 .htaccess 文件。

另外,我假設您已經在 apache2.conf 文件中“包含”了 conf-enabled/*.conf

引用自:https://serverfault.com/questions/649966