我希望将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
答案 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。