.htaccess 阻止访问除某些特定文件之外的所有.php文件(htaccess)

w8f9ii69  于 2022-12-04  发布在  PHP
关注(0)|答案(1)|浏览(181)

当访问者试图访问.php URL时,我想将访问者发送到自定义404错误页,但有一些特定的例外:
例外情况如下:

(maybe-something/)/allowed-file.php

我当前的.htaccess文件阻止访问所有.php文件:

ErrorDocument 404 /error404.php
ErrorDocument 403 /error404.php
Options -MultiViews

RewriteEngine on
RewriteCond %{SERVER_PORT} 80

# Force WWW & SSL
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

##.php envia a 404
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php - [F,L]

如何添加几十个特定的例外?

gudnpqoy

gudnpqoy1#

##.php envia a 404
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php - [F,L]

将此更改为:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !/allowed-file\.php$
RewriteRule .\.php - [F]

!前缀否定表达式。因此,当请求的URL * 不是 * /allowed-file.php/<anything>/allowed-file.php时,第二个条件成功。RewriteCond指令的第二个参数(在!前缀之后)是正则表达式(默认情况下)。
若要添加更多例外;添加更多 * 条件 *(RewriteCond指令)。
请注意,我删除了RewriteRulepattern 中的捕获组,因为它没有被使用。并且在使用F标志时不需要L标志(它是隐含的)。
但是,此规则在配置文件中的位置不正确。它应该紧跟在RewriteEngine指令之后,并在规范重定向 * 之前 *。
此外,该杂散的RewriteCond %{SERVER_PORT} 80指令(紧跟在RewriteEngine指令之后)是多余的,应该删除(以避免以后出现意外错误)。
参考编号:

  • https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

相关问题