htaccess规则不符合条件

时间:2017-03-21 16:54:47

标签: .htaccess

我有一个带

的htaccess文件
Options +Indexes
RewriteEngine on
RewriteCond %{HTTP_COOKIE} !mycookie [NC]
RewriteRule /*.(mp4|wav|mp3|MP3|WAV|MP4|omf|OMF|jpg|jpeg|gif)$ /noaccess.html [R=307,NC]
RewriteRule ^download\.php$ /noaccess.html [R,L]
DirectoryIndex root.php /clients/files_client.php
ErrorDocument 404 /clients/404.php
ErrorDocument 400 /clients/root.php

始终执行第二次重写规则,与条件无关。无论cookie是否存在,任何包含download.php的url都会重定向到noaccess.html。为什么呢?

2 个答案:

答案 0 :(得分:1)

您的规则和条件似乎不正确。

有这样的话:

DirectoryIndex root.php /clients/files_client.php
ErrorDocument 404 /clients/404.php
ErrorDocument 400 /clients/root.php
Options +Indexes
RewriteEngine on

RewriteCond %{HTTP_COOKIE} !mycookie [NC]
RewriteCond %{QUERY_STRING} \.(?:mp[43]|wav|omf|jpe?g|gif) [NC]
RewriteRule (?:^|/)download\.php$ /noaccess.html [R=307,NC,L]

确保在完全清除浏览器缓存后进行测试。

答案 1 :(得分:1)

任何RewriteCond都属于immediately following RewriteRule

  

可以使用一个或多个RewriteCond指令来限制将受以下RewriteRule 约束的请求类型。

这意味着,如果您需要多个规则的条件,则必须为每个规则复制它,例如

RewriteCond %{HTTP_COOKIE} !mycookie [NC]
RewriteRule /*.(mp4|wav|mp3|MP3|WAV|MP4|omf|OMF|jpg|jpeg|gif)$ /noaccess.html [R=307,NC]

RewriteCond %{HTTP_COOKIE} !mycookie [NC]
RewriteRule ^download\.php$ /noaccess.html [R,L]

如果条件对所有规则有效,您也可以在条件相反的情况下提前退出规则链

RewriteCond %{HTTP_COOKIE} mycookie [NC]
RewriteRule ^ - [L]

RewriteRule /*.(mp4|wav|mp3|MP3|WAV|MP4|omf|OMF|jpg|jpeg|gif)$ /noaccess.html [R=307,NC]

RewriteRule ^download\.php$ /noaccess.html [R,L]