使用htaccess和php创建伪子目录并按原样保留现有目录

时间:2010-05-04 15:49:31

标签: php .htaccess

我有一个网站,已经有很多子目录。 (全部存在于服务器的文件系统中) 我想用htaccess创建新的“虚拟”子目录,但是我只希望htaccess规则适用于DB中列出的目录,而不存在于文件系统中。

即。 文件系统有:/ dir1 /& / DIR2 /

MySQL数据库记录了'dir3'和& 'dir4'

我想要:

答:mysite.com/dir1/和mysite.com/dir2/显示现有的旧内容

B:mysite.com/dir3/和mysite.com/dir4/显示来自PHP sctipt通过redirect提供的MySQL内容,如: mysite.com/myscript.php?dir=dir3

C:mysite.com/dir5/显示404错误(Dir在DB或数据库中不存在)

基本上我想.htaccess像这样工作: 如果数据库中存在DIR - 应用重写规则并显示myscript.php中的内容?dir = DIR

ELSE不适用任何规则。

我可以创建一个单独的php脚本,当DB中存在给定的dir名称时可以返回0/1,但是如何让mod_rewrite从该脚本中获取数据呢?

是否可以使用htaccess / PHP?

2 个答案:

答案 0 :(得分:3)

选项1 :进行以下htaccess:

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

将所有不存在的目录和文件重定向到PHP脚本。在该脚本中,您可以手动解析所请求的URL并检查您的mysql表下一步该做什么 - 转发或返回404。

选项2:如果您的带有文件夹的表不经常更改和/或您需要速度,请在表更改后从php生成htaccess文件,并将所有虚拟文件夹映射到db。

答案 1 :(得分:0)

你不能在.htaccess afaik中做那样的检查。我会尝试将旧内容文件夹硬编码到.htaccess中,并使用模式重写其余文件。