.htaccess多个重定向

时间:2009-12-08 06:21:42

标签: .htaccess redirect

这是我的目录结构

/home
    /template
    /classifieds
    /listings

我想要隐藏/模板,并希望在家中模板下显示所有文件。像/home/template/home.php应该是www.example.com/home.php或/home/template/style.css应该是www.example.com/style.css

有人试图访问example.com/template/.php应该返回到example.com/.php(如果存在)或者404.php(如果它不存在的话)。

这是我处理这个问题的方法。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^/template/.*php
RewriteRule . /$1 [NC,R] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Options -Indexes

我的PHP代码

if (!file_exists("template/" . $page))
    include_once "template/404.php";
else
    include_once "template/" . $page;

然而 我添加了更多的东西,比如/ classified和/ listing应该按原样列出,即example.com/classified / * .php

现在当我尝试访问/answers/home.php时,它会直接打开home.php而不是打开index.php

这是我的新代码

if (!file_exists($segments[1] . '/' . $page))
        include_once "template/404.php";
else
    include_once $segments[1] . '/' . $page;

那应该是什么样的htaccess?

1 个答案:

答案 0 :(得分:1)

我知道这不是您问题的直接答案,但在逻辑上组织您的文件结构以匹配您的网络结构似乎更有意义。我建议:

/home
  /public_html
     /classifieds
     /listings
     404.php
     index.php

从我在你的帖子中可以看出,完全没有理由使用mod_rewrite。

但如果你真的想知道:

RewriteCond %{REQUEST_URI} !^/classifieds/
RewriteCond %{REQUEST_URI} !^/listings/