我有一个带
的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。为什么呢?
答案 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]