Apache-2.2

我應該如何在 .htaccess 中使用 <If> 指令?

  • May 2, 2017

我正在嘗試在我的 .htaccess 文件中使用 Apache 的 If 指令添加條件語句。

我已經引用了這個頁面http://httpd.apache.org/docs/trunk/mod/core.html#if但它並沒有詳細說明/給出很多例子。它給出的兩個不完整的例子是:

&lt;If %{REQUEST_METHOD} IN GET,HEAD,OPTIONS&gt; 

&lt;如果 "$req{Host} = ''"&gt; 

因此,我嘗試將其添加到我的 .htaccess 文件中:

&lt;如果 %{SERVER_PORT} 在 GET,HEAD,OPTIONS&gt;
#這裡還沒有
&lt;/如果&gt;

但是當我嘗試載入頁面時,我不斷收到**錯誤 500 。**這是在我的本地安裝上,以前執行良好(或者如果我刪除了該程式碼)。我相信我已經AllowOverride All在全球範圍內進行了設置,並且 If 指令的上下文應該讓它出現在 .htaccess 中(“上下文:伺服器配置、虛擬主機、目錄、.htaccess”)。

有人可以給我一些如何正確使用 <If> 指令的例子,或者一些關於它為什麼不適合我的指導嗎?

謝謝!

&lt;If&gt;指令僅適用於 Apache 2.4+ 而不是 2.2 或更早版本。

http://httpd.apache.org/docs/2.4/mod/core.html#if

2.2 中不存在的文件:

http://httpd.apache.org/docs/2.2/mod/core.html#if

&lt;If&gt;僅在 Apache 2.4+ 中可用,因此首先確保您擁有該版本。

例子

# Compare the host name to example.com and redirect to www.example.com if it matches
&lt;If "%{HTTP_HOST} == 'example.com'"&gt;
 Redirect permanent "/" "http://www.example.com/"
&lt;/If&gt;

&lt;If "%{HTTP_HOST} =~ /regex/"&gt;
 SecFilterEngine Off
 SecFilterScanPOST Off
&lt;/If&gt;

&lt;If "%{REQUEST_URI} =~ m#/regex/including/slashes/#"&gt;
 SecFilterEngine Off
 SecFilterScanPOST Off
&lt;/If&gt;

替代品&lt;If&gt;

如果您仍然堅持使用 Apache 2.2 中的條件語句,還有其他一些解決方案。

  • 您可以通過以下方式設置環境變數:

    • 阿帕奇配置
    • SetEnvIf
    • mod_rewrite 的RewriteMatch
  • 然後你可以使用執行條件語句

&lt;IfDefine MyEnvironmentVar&gt;
  ...
&lt;/IfDefine&gt;

例子:

# Set environment variable if we're on staging site
SetEnvIf Host staging ROBOTS_NOINDEX

# Set environment variable if we're within a specific folder
SetEnvIf Request_URI ^/app/webroot/files/ ROBOTS_NOINDEX

# Send custom header if environment variable is set
Header set X-Robots-Tag "noindex" ENV=ROBOTS_NOINDEX

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