这是我的目录结构
/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?
答案 0 :(得分:1)
我知道这不是您问题的直接答案,但在逻辑上组织您的文件结构以匹配您的网络结构似乎更有意义。我建议:
/home
/public_html
/classifieds
/listings
404.php
index.php
从我在你的帖子中可以看出,完全没有理由使用mod_rewrite。
但如果你真的想知道:
RewriteCond %{REQUEST_URI} !^/classifieds/
RewriteCond %{REQUEST_URI} !^/listings/