在评估redirect到特定URL并重写条件满足的重写规则时,是否可以使用HTTP_HOST作为要redirect到的URL的一部分?
问题示例:
RewriteRule .*\.(jpg|jpe?g|gif|png|bmp)$ http://%{HTTP_HOST}/no-leech.jpg [R,NC]
这个问题背后的动机是希望创build一个单一的htaccess文件,该文件可以匹配一个附加域(共享主机帐户)和无限多个子域,以防止图像被盗链。
您可以使用%1 (和%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]
testing:
# GET -Sd http://localhost/foo.jpg GET http://localhost/foo.jpg --> 302 Found GET http://localhost/no-leech.jpg --> 200 OK
并使用不同的主机头:
# 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