簡體   English   中英

如果 url 包含使用 htaccess 文件的任何獲取參數,如何添加 header?

[英]How to add a header if the url contain any get parameter using htaccess file?

我在 Apache2 服務器中運行 PHP。 我想添加header("X-Robots-Tag: noindex", true); 如果 url 包含任何獲取參數,例如https://example.com/? https://example.com/a.php? https://example.com/a.php?key=value 所以基本上,如果 url 包含? 包機,需要添加 header。

是否可以使用.htaccess文件來做到這一點以及如何做到這一點? 或者有沒有其他方法可以實現這一目標?

參考: https://yoast.com/x-robots-tag-play/

https://example.com/? https://example.com/a.php?

這兩個實例中的問題是查詢字符串為,因此您無法使用標准的QUERY_STRING服務器變量檢查這一點(“空”和“不存在”評估為相同的東西,即)。

但是,您可以檢查文字? (即查詢字符串分隔符)在 HTTP 請求標頭的第一行中,包含在THE_REQUEST Apache 服務器變量中。

在上面的第一個示例中,這將包含以下形式的字符串:

GET /? HTTP/1.1

對於/a.php?key=value ,這將是:

GET /a.php?key=value HTTP/1.1

我們可以使用 mod_rewrite 來檢查並設置環境變量。 然后使用header指令根據是否設置此 env var 有條件地設置所需的X-Robots-Tag HTTP 響應 header。

例如,在根.htaccess文件的頂部附近:

RewriteEngine On

# Check for literal "?" in URL and set QUERY_EXISTS env var 
RewriteCond %{THE_REQUEST} \s/.*\?
RewriteRule ^ - [E=QUERY_EXISTS:1]

# Set header if QUERY_EXISTS is set
header set X-Robots-Tag "noindex" env=QUERY_EXISTS

這會將 header 設置為 2xx“OK”響應。 例如,它不會在 404 上設置 header - 但 404 無論如何都不會被索引,因此 header 是多余的。 但是,如果您特別需要在所有(非 2xx)響應上設置 header,則使用always條件。 例如:

# Use "always" to set on non-2xx responses as well
header always set ....

請注意,這也取決於.htaccess文件中可能包含的其他指令。 例如,如果您有導致重寫引擎“循環”的現有 mod_rewrite 指令,則 env var 將重命名為REDIRECT_QUERY_EXISTS ,您可能需要在header指令中檢查這一點。

暫無
暫無

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

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