.htaccess 如何添加一个头,如果网址包含任何获取参数使用htaccess文件?

htzpubme  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(168)

我在Apache 2服务器上运行PHP。如果url包含任何get参数,如https://example.com/?https://example.com/a.php?https://example.com/a.php?key=value,我想将header("X-Robots-Tag: noindex", true);添加到我的页面中。所以基本上,如果url包含? charter,则需要添加标头。
有没有可能使用.htaccess文件来实现它,以及如何做到这一点?或者有没有其他方法来实现这一点?
参考:https://yoast.com/x-robots-tag-play/

编辑

以下是现有的重写代码;

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^nps-benchmarks/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/$1 [P]
RewriteRule ^agency/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/site/mod1/$1 [P]
RewriteRule ^apps/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/site/mod2/$1 [P]
RewriteRule ^help-each-other/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/site/mod3/$1 [P]
RewriteRule ^customers-help-each-other/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/site/mod4/$1 [P]
RewriteRule ^de/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/site/multilanguage/de/$1 [P]
RewriteRule ^es/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/site/multilanguage/es/$1 [P]
RewriteRule ^fr/(.*)$ http://testing.mysite.com.s3-website-us-east-1.amazonaws.com/site/multilanguage/fr/$1 [P]
RewriteRule ^(wp-content/themes/my-site/assets/)(css|js)(/.+)(-v\d+\.\d+)\.(min)\.(js|css)$ $1/$2/$3.$5.$6 [L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
rqmkfv5c

rqmkfv5c1#

例如https://example.com/?https://example.com/a.php?
这两个示例中的问题是查询字符串为 empty,因此您无法使用标准的QUERY_STRING服务器变量检查此情况(“empty”和“not-exists”的计算结果相同,即 empty)。
但是,您可以检查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响应头。
例如,在根.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

这会在2xx个“OK”回应上设定信头。例如,它不会在404上设定信头,但404不会被索引,因此信头是多余的。不过,如果您特别需要在 all(non-2xx)回应上设定信头,请使用always条件。例如:

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

请注意,这还取决于.htaccess文件中可能存在的其他指令。例如,如果存在导致重写引擎“循环”的mod_rewrite指令,则env var将被重命名为REDIRECT_QUERY_EXISTS,您可能需要在header指令中进行检查。

相关问题