阻止对.php文件的直接访问,减少索引.php文件和 ajax.php 文件



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

我想要的是没有人可以使用.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 的错误。

现在我在想如何让它与您可以输入索引的 htaccess 代码一起工作.php 和/include/ajax.php,我尝试了所有方法,但它对我不起作用。

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

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

每个RewriteRule都有三部分:

  • 要与浏览器发送的 URL 匹配的模式
  • 要重写到的网址
  • 一组可选标志,用于额外选项

在每个规则之前,您可以选择有一行或多行RewriteCond,这些行对规则应用额外的条件;每个行包含三个部分:

  • 要匹配的变量
  • 要匹配的模式
  • 一组可选标志,用于额外选项

在这种情况下,最重要的标志是[F][forbidden]的缩写,它说"如果规则匹配,而不是重写或重定向,只需服务器 403 响应。

您很少需要针对%{THE_REQUEST}进行测试,这是来自浏览器的请求行的原始版本;更常见的是,您需要%{REQUEST_URI}和/或%{QUERY_STRING}

RewriteRuleRewriteCond中的模式都可以通过以!开头来否定(即"不得与此模式匹配")

因此,如果您想为所有以".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 手册中。

经过 2 天的寻找一些代码,我能够阅读和理解。 研究 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都被阻止,索引.php和/include/ajax.php 文件除外。

这就是它对我的工作方式。 如果我是对还是错,你能给我一些指导吗?

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

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

最新更新