一直在寻求您的帮助,我找到了一种方法,但它不是我想要的。 如果有人可以帮助我。
我想要的是没有人可以使用.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}
。
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 手册中。
经过 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。