.htaccess重定向如果是root,index.php,不是文件或不是目录

时间:2012-05-30 11:34:29

标签: php apache .htaccess rewrite

目前我有一个处理请求的控制器(使用友好的URL)。要重定向到此控制器,请使用以下.htaccess:

 RewriteEngine on

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d

 RewriteRule ^(.*)$ __controller.php?p=$1 [L,QSA]

然后我有一个 index.php 重定向到/ home这是主页(我强制这样,所以主页也使用控制器):

<?php
header('Location: home', true, 301);
exit();
?>

但是,我还希望它发送到这个控制器,如果文件是index.php或者它是根域(因为我不再希望主页是www.test.com/home而是只是www。 test.com),所以以下每个都将通过控制器:

www.test.com/friendly-url/123/post-topic(目前有效)

但是:

www.test.com/index.php AND www.test.com

显然,由于index.php文件存在,目前最后两个条件不起作用,因此.htaccess不会通过控制器发送它。

2 个答案:

答案 0 :(得分:3)

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^index.php$ /home [L,R=301,QSA]
RewriteRule ^$ __controller.php?p=home [L,QSA]
RewriteRule ^(.*)$ __controller.php?p=$1 [L,QSA]

你在找这个吗?

然后您不需要PHP重定向

答案 1 :(得分:0)

将此.htaccess代码替换为:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule (?!^index\.php/?$)^(.+)$ __controller.php?p=$1 [L,QSA,NC]