.htaccess热链接禁用无法正常工作

.htaccess热链接禁用无法正常工作,.htaccess,mod-rewrite,referrer,hotlinking,.htaccess,Mod Rewrite,Referrer,Hotlinking,我有以下片段: RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://%{SERVER_NAME}/ RewriteRule \.(js|css|png|jpg) - [R=404,L] 简单,应该正常工作吗?如果我在浏览器上启用了referer,则似乎可以删除列出的文件类型。禁用引用然后允许提供文件。我已经检查了%{SERVER_NAME}的值,它是www.mydomain.com。我已经在多个浏览器中以

我有以下片段:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://%{SERVER_NAME}/
RewriteRule \.(js|css|png|jpg) - [R=404,L]
简单,应该正常工作吗?如果我在浏览器上启用了referer,则似乎可以删除列出的文件类型。禁用引用然后允许提供文件。我已经检查了%{SERVER_NAME}的值,它是www.mydomain.com。我已经在多个浏览器中以及HTTP和HTTPS下对此进行了测试,结果都是一样的。我使用以下重写来检查%{SERVER_NAME}的值:

RewriteRule servername value_is_%{SERVER_NAME} [R=301,L]
我重定向到的URL是


也就是说,代码段应该允许引用者使用该值或空值。但为什么会被触发呢?在过去的两个小时里,我都快发疯了,但现在已经是凌晨5点了,所以我可能会发疯=哦\提前谢谢你,我要去睡觉了

问题是,您不能在条件模式中使用变量(至少在Apache 2.4之前是这样),因为这些模式是在服务器启动期间预编译的

但是,对于您的特定问题,有一个简单的解决方法,您可以使用它来模拟条件:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{SERVER_NAME}%{HTTP_REFERER} !^(.*)https?://\1/
RewriteRule \.(js|css|png|jpg) - [R=404,L]
是的,就这些。不能使用变量,但可以使用反向引用

哦。。。顺便说一句,Apache2.4提供的表达式可以代替条件模式使用:

 RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"

问题是,您不能在条件模式中使用变量(至少在Apache2.4之前是这样),因为这些模式在服务器启动期间是预编译的

但是,对于您的特定问题,有一个简单的解决方法,您可以使用它来模拟条件:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{SERVER_NAME}%{HTTP_REFERER} !^(.*)https?://\1/
RewriteRule \.(js|css|png|jpg) - [R=404,L]
是的,就这些。不能使用变量,但可以使用反向引用

哦。。。顺便说一句,Apache2.4提供的表达式可以代替条件模式使用:

 RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"

谢谢,我就知道这很简单。如果您有时间,可以将我链接到Apache2.4文档中关于cond模式中VAR的新增功能吗?链接:。向下滚动页面的一半,它几乎位于“重写秒”部分的末尾。谢谢,我知道这很简单。如果您有时间,可以将我链接到Apache2.4文档中关于cond模式中VAR的新增功能吗?链接:。向下滚动半页,它几乎位于
RewriteCond
部分的末尾。