在我的.htaccess文件中,我定义了以下规则,使我的注册页面网址为http://example.com/register/
RewriteRule register/ /register.php
上述规则完全正常,但我可以从http://example.com/register/
以及http://example.com/register.php
访问我的注册页面。
我不希望该用户能够从http://example.com/register.php
URL访问该URL,是否有任何我可以在.htaccess中定义的规则来停止执行register.php URL或只是重定向任何直接寄存器.php请求/ register /
答案 0 :(得分:4)
如果您这样做是为了避免获得相同内容的多个链接,则只需在页面的任何位置不使用“register.php”即可。我认为没有搜索引擎会“猜测”某种文件类型,如果没有安全问题,那么你是安全的,因为我认为没有用户会链接到这个文件。但是,如果您想确定只需通过index.php通过.htaccess中的一行重新路由所有功能,该行应放在www-root目录中:
RewriteEngine on
RewriteRule ^(.*?)$ index.php?file=$1
在index.php中,您可以通过分解并检查$ _GET [“file”]参数来简单地选择要调用的函数/文件。要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”,并通过完全拒绝访问或仅重定向到新位置来采取相应行动。
答案 1 :(得分:3)
确实您不能使用location指令,但实际上可以将.htaccess文件粘贴到任何目录中。
如果你把它放进去,请说:
Options -Indexes
order allow,deny
deny from all
您可以将此文件复制粘贴到要防止外部执行的任何(根)目录中。
答案 2 :(得分:1)
要检查初始请求的网址路径,您需要使用request line。所以试试这条规则:
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php[/?\s]
RewriteRule (.+)\.php$ /$1 [L,R=301]
然后又是你的规则(稍加修改):
RewriteRule ^register/$ register.php
答案 3 :(得分:0)
试试这个。
RewriteCond %{REQUEST_FILENAME} ^register\.php$ [NC]
RewriteRule ^/register register.php
或者这个
Redirect register.php /register
答案 4 :(得分:0)
忽略用户体验部分,您可以实施new rel=canonical link来整理搜索引擎。
虽然对于这个的情况,你应该只使用从/register.php的301重定向到/ register /
在register.php中
if ( stristr( $_SERVER['REQUEST_URI'], '.php' ) )
{
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: /register');
}
答案 5 :(得分:0)
如果您想使用mod_rewrite
完全阻止/register.php,请使用SleepyCod答案的变体:
RewriteCond %{REQUEST_FILENAME} register\.php [NC]
RewriteCond %{IS_SUBREQ} false
RewriteRule .* - [F,L]
说明:
[NC]
:使条件不区分大小写,以防您使用的是Windows框。[F]
:发送403 Forbidden标头,[L]
:这是要应用的最后一条规则,跳过所有后续重写规则正确重写本身就是一门艺术。我建议你仔细阅读http://httpd.apache.org/docs/2.2/rewrite/。
干杯,