阻止直接访问.php文件,减去index.php文件和ajax.php文件

问题描述 投票:0回答:2

一直在寻求您的帮助,我找到了一种方法,但它并不如我所愿。如果有人可以帮助我。

我想要的是没有人可以直接输入带有.php的URL

例如,当我输入我的domain.com/buy/product.php时,我希望它被禁止,

我在这里寻找信息,我发现这段代码对我有用,但在 .htaccess 中

RewriteEngine On

RewriteCond %{THE_REQUEST} "^.+? [^?]+\.php(?:[?/# ]|$)" [NC]
RewriteRule !^index\.php$ - [F,L,NC]

它对我来说工作得很好,但问题是我在目录 /include/ajax.php 中,我使用了 ajax。它给我错误通过浏览执行ajax。

现在我正在考虑如何使其与可以输入index.php和/include/ajax.php的htaccess代码一起工作,我尝试了所有方法,但它对我不起作用。

在另一种情况下,如果您知道要添加到我的 php 中的任何代码或如何为我的版本(版本 7.3)执行操作,但又不会破坏我的代码。

apache .htaccess
2个回答
2
投票

我不会直接给你答案,而是给你一些提示,这样你就不会复制你不理解的代码。

每个

RewriteRule
都包含三个部分:

  • 与浏览器发送的 URL 相匹配的模式
  • 要重写的 URL
  • 用于额外选项的可选标志集

在每条规则之前,您可以选择有一个或多个

RewriteCond
行,将额外的条件应用于规则;每个都由三个部分组成:

  • 要匹配的变量
  • 要匹配的图案
  • 用于额外选项的可选标志集

在这种情况下,最重要的标志是

[F]
,是
[forbidden]
的缩写,它表示“如果规则匹配,则只需服务器 403 响应,而不是重写或重定向。

您应该很少需要针对

%{THE_REQUEST}
进行测试,这是来自浏览器的请求行的原始版本;更多时候,您想要
%{REQUEST_URI}
和/或
%{QUERY_STRING}

RewriteRule
RewriteCond
中的模式都可以通过以
!

开头来否定(即“不得匹配此模式”)

因此,如果您想为所有以“.bad”结尾的 URL 返回 403,除了以“not.bad”或“only-a-little.bad”结尾的 URL,您可以这样写(请注意,

$
是在正则表达式模式中表示“必须在此处结束”的方式;并且
.
表示“任何字符”,但
\.
与实际的
.
匹配):

RewriteCond %{REQUEST_URI} !not\.bad$
RewriteCond %{REQUEST_URI} !only-a-little\.bad$
RewriteRule \.bad$ - [F]

希望它应该足够简单,以便了解如何使其适应您的要求。

可用选项和变量的完整列表位于 Apache 手册


0
投票

经过两天寻找一些代码,我能够阅读并理解。 研究 htaccess 是如何工作的。

感谢指导我的用户,我找到了解决方案。 虽然我的标题不太正确。

我的意图始终是阻止用户总是想通过.PHP直接输入的所有.php,我找到了上面的代码,但它不适用于/include/ajax.php文件夹中的特定文件,正是它是一个ajax,我找不到解决方案。

确实是一个 Ajax,我找不到让它工作的解决方案。

直到我设法以这种方式解决。

RewriteEngine on

RewriteCond %{THE_REQUEST} ajax\.php [NC]
RewriteRule ^ - [NC,L]

RewriteCond %{THE_REQUEST} .+\.php [NC]
RewriteRule ^ - [F,L]

这会导致所有 .php 被阻止,除了 index.php 和 /include/ajax.php 文件。

这对我来说就是这样。 如果我是对还是错,你能给我一些指导吗?

我留下这个以防将来有人发现它有用。 我总是被建议路由我的 php,这样我就会忘记这些问题。

我会在未来前进时牢记这一点,以路由我的 php。

© www.soinside.com 2019 - 2024. All rights reserved.