Mod_rewrite:如何捕获.php文件?

时间:2010-09-26 13:34:56

标签: php .htaccess mod-rewrite

我正在尝试捕获所有.php请求,以便我的访问者无法看到php魔法

我希望将example.com/home重定向到example.com/index.php,但我不希望直接访问example.com/index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

虽然乍一看似乎有效,但并不会阻止用户直接访问example.com/index.php。

我该如何解决这个问题?


回答答案:

RewriteRule ^index.php$ / [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

RewriteRule ^home/?$ /index.php?category=1 [L]

example.com/home输出example.com/category=1

2 个答案:

答案 0 :(得分:1)

您可以在preg_match()变量上为.php运行$_SERVER['REQUEST_URI'],然后使用header()进行相应的重定向。例如,在index.php中:

if(preg_match('/\.php/', $_SERVER['REQUEST_URI'])) {
    header('Location: home');
    die();
}

但是,它不支持任何查询字符串参数,因为我不知道你的/ home重写中的格式是什么。不过,$_SERVER['QUERY_STRING']将成为你的朋友。

答案 1 :(得分:1)

试试这个:

RewriteRule ^index.php$ / [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

如果用户试图直接转到index.php,它将重定向到站点的根目录。否则,它将运行您现有的规则,将任何内容传递给index.PHP。