我有一个网站,已经有很多子目录。 (全部存在于服务器的文件系统中) 我想用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?
答案 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中,并使用模式重写其余文件。