如何停止使用htaccess的规则,一个PHP网页直接执行?(How to stop direct

2019-06-25 11:15发布

在我的.htaccess文件我已经定义了以下规则,使我的注册页面的URL作为http://example.com/register/

RewriteRule register/ /register.php

上述规则是完全没有问题,但我可以从访问我的注册页面http://example.com/register/以及来自http://example.com/register.php

我不希望用户将能够从访问URL http://example.com/register.php URL,有我可以在.htaccess定义停止register.php URL的执行或简单地重定向任何规则任何直接register.php请求/注册/

Answer 1:

如果你这样做是为了避免让多个链接到相同的内容,你可以简单地不使用“register.php”你的页面上的任何地方。 我想,没有搜索引擎将“猜”对一个特定的文件类型,如果没有安全问题,你是在安全方面,因为在我看来,没有用户会链接到该文件要么。 但是,如果你想成为某些只是通过在你的.htaccess一行,应将其放在您的www根目录下重新路由通过index.php的所有功能:

RewriteEngine on
RewriteRule ^(.*?)$ index.php?file=$1

在你的index.php所以可以只选择通过分解和检查$ _GET [“文件”]参数来调用该函数/文件。 为了使100%肯定没有人可以访问您的register.php文件直接只需将它(和所有你对他人)移动到一个单独的目录,包括与以下行.htaccess文件:

DENY from all 

有一对夫妇的其他选项,以防止直接访问。 只是define()在你的index.php变量的地方,并在您的register.php顶部只是把

defined('access') or die('Intruder alert!');

在顶部。 另一种方法可能是要诚实,只是告诉搜索引擎你的内容已被移动,他们不再应该使用旧的链接:

header("Status: 301"); /* Content moved permanently */
header("Location: http://yourserver/Register/");
exit;

更新

只是多一个掠过我脑海的事情,你也可以检查$_SERVER["REQUEST_URI"]用户是否附加任何“.PHP”,并要么拒绝访问完全或只是重定向到新的位置采取相应的行动。



Answer 2:

这是事实,你不能使用位置指令,但可以.htaccess文件实际上粘贴到任何目录。

只是,如果你把这个进去,说:

Options -Indexes
order   allow,deny
deny    from all

你可以将这个文件复制粘贴到你想从外部执行,以保护任何(根)目录。



Answer 3:

要检查初始请求的URL路径,您需要使用请求行 。 因此,尝试以下规则:

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php[/?\s]
RewriteRule (.+)\.php$ /$1 [L,R=301]

再然后你的规则(在稍加修改的方法):

RewriteRule ^register/$ register.php


Answer 4:

试试这个。

RewriteCond %{REQUEST_FILENAME} ^register\.php$ [NC]
RewriteRule ^/register register.php

或这个

Redirect register.php /register


Answer 5:

忽略用户体验的一部分,您可以实现新的rel =规范链接理清搜索引擎。

虽然, 这种情况下,你应该只使用301重定向从/register.php到/注册/

在register.php

if ( stristr( $_SERVER['REQUEST_URI'], '.php' ) )
{
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: /register');
}


Answer 6:

如果您想使用完全阻断/register.php mod_rewrite ,使用SleepyCod的回答的变体:

RewriteCond %{REQUEST_FILENAME} register\.php [NC]
RewriteCond %{IS_SUBREQ} false
RewriteRule .* - [F,L]

说明:

  • [NC]使条件不区分大小写的,万一你在Windows中。
  • 条件1:请求的文件名是“register.php”,
  • 条件2:请求是没有子请求(这是很重要的,因为每一个新一轮通过的RewriteRules实际创建子请求)。
  • 规则:基本上什么都不做
  • 标志: [F]发送403禁止头, [L]这是应用的最后一条规则,跳过所有下面的重写规则

正确地重写是一门艺术本身。 我建议你仔细阅读http://httpd.apache.org/docs/2.2/rewrite/ 。

干杯,



文章来源: How to stop direct execution of a php page using htaccess rules?