在我的.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请求/注册/
如果你这样做是为了避免让多个链接到相同的内容,你可以简单地不使用“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”,并要么拒绝访问完全或只是重定向到新的位置采取相应的行动。
这是事实,你不能使用位置指令,但可以.htaccess文件实际上粘贴到任何目录。
只是,如果你把这个进去,说:
Options -Indexes
order allow,deny
deny from all
你可以将这个文件复制粘贴到你想从外部执行,以保护任何(根)目录。
要检查初始请求的URL路径,您需要使用请求行 。 因此,尝试以下规则:
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php[/?\s]
RewriteRule (.+)\.php$ /$1 [L,R=301]
再然后你的规则(在稍加修改的方法):
RewriteRule ^register/$ register.php
试试这个。
RewriteCond %{REQUEST_FILENAME} ^register\.php$ [NC]
RewriteRule ^/register register.php
或这个
Redirect register.php /register
忽略用户体验的一部分,您可以实现新的rel =规范链接理清搜索引擎。
虽然, 这种情况下,你应该只使用301重定向从/register.php到/注册/
在register.php
if ( stristr( $_SERVER['REQUEST_URI'], '.php' ) )
{
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: /register');
}
如果您想使用完全阻断/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/ 。
干杯,