【问题标题】:Create fake subdirectories with htaccess and php AND keep existing directories as is使用 htaccess 和 php 创建虚假子目录并保持现有目录不变
【发布时间】:2010-05-04 15:49:30
【问题描述】:

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

即 文件系统有:/dir1/ & /dir2/

MySQL 数据库有 'dir3' & 'dir4' 的记录

我想要:

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

B:mysite.com/dir3/ 和 mysite.com/dir4/ 显示 PHP stippt 通过重定向提供的 MySQL 内容,例如: mysite.com/myscript.php?dir=dir3

C: mysite.com/dir5/ 显示 404 错误(Dir 在 DB 和 Database 中都不存在)

基本上我希望 .htaccess 像这样工作: IF DIR Exists in DB - 应用重写规则并显示来自 myscript.php?dir=DIR

的内容

ELSE 不应用任何规则。

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

htaccess/PHP 有可能吗?

【问题讨论】:

    标签: php .htaccess


    【解决方案1】:

    选项 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.xml 映射所有虚拟文件夹。

    【讨论】:

      【解决方案2】:

      您不能在 .htaccess afaik 中进行这样的检查。我会尝试将旧的内容文件夹硬编码到 .htaccess 中,并使用一种模式来重写其余部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-15
        • 2012-03-11
        • 1970-01-01
        • 2013-07-12
        • 2010-11-19
        相关资源
        最近更新 更多