关于RewriteRule和HTTP_HOST服务器变量的问题

关于RewriteRule和HTTP_HOST服务器变量的问题

在评估重定向到特定 URL 的重写规则并假设满足重写条件时,是否可以使用 HTTP_HOST 作为要重定向到的 URL 的一部分?

有问题的例子:

RewriteRule .*\.(jpg|jpe?g|gif|png|bmp)$ http://%{HTTP_HOST}/no-leech.jpg [R,NC]

这个问题背后的动机是希望创建一个单独的 htaccess 文件,该文件将与一个附加域(在共享托管帐户上)及其下方的无限数量的子域相匹配,以防止图像的热链接。

答案1

您可以使用%1(and%2等) 来访问前面RewriteCond语句中的匹配项:

RewriteEngine On
# don't redirect no-leech.jpg or we'll end up in a loop
RewriteCond %{REQUEST_URI} !^/no-leech.jpg$
# match Host header and store
RewriteCond %{HTTP_HOST} (.*)
RewriteRule \.(jpg|jpe?g|gif|png|bmp)$ http://%1/no-leech.jpg [R,NC,L]

测试:

# GET -Sd http://localhost/foo.jpg
GET http://localhost/foo.jpg --> 302 Found
GET http://localhost/no-leech.jpg --> 200 OK

并使用不同的 Host 标头:

# GET -SedH 'Host: foo.bar.com' http://localhost/foo.jpg
GET http://localhost/foo.jpg --> 302 Found
GET http://foo.bar.com/no-leech.jpg --> 200 OK

相关内容