一直在寻求您的帮助,我找到了一种方法,但它并不如我所愿。如果有人可以帮助我。
我想要的是没有人可以直接输入带有.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)执行操作,但又不会破坏我的代码。
我不会直接给你答案,而是给你一些提示,这样你就不会复制你不理解的代码。
每个
RewriteRule
都包含三个部分:
在每条规则之前,您可以选择有一个或多个
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 手册。
经过两天寻找一些代码,我能够阅读并理解。 研究 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。