【问题标题】:Excluding a subdirectory from htaccess mod rewrite从 htaccess mod rewrite 中排除子目录
【发布时间】:2014-02-21 03:34:04
【问题描述】:

我正在构建一个具有自动加载 php 功能的站点,以检查控制器中是否存在类名。该函数在 index.php 中,并在站点上的每个 url 上运行,然后根据需要使用 php 进行重定向。

我已在我的文档根目录中添加了一个名为 engine 的新子目录。在这个子目录中,有一些单独的类需要在不通过文档根目录中主 index.php 中的自动加载功能的情况下运行。

我正在寻找一个 .htaccess 规则,它允许我从加载 index.php 的默认重写规则中排除引擎子目录和其中的所有文件/文件夹。

以下是我的 .htaccess 文件示例,显示了我尝试过的 3 种不同的排除规则。

规则 2 和规则 3 没有任何影响。规则 1 将对引擎子目录中任何内容的所有请求重定向到该子目录中的 index.php。使用规则 1 时,它似乎丢失了请求 uri 的其余部分。

例如,如果我想加载 engine/subfolder/lib/file.php 规则,只需将我发送到 engine/index.php。我想我可能在该规则中遗漏了一些小东西,需要附加请求 uri 的其余部分。

Options +FollowSymLinks
RewriteEngine on

#rule 1
RewriteCond %{REQUEST_URI} !^/engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ engine [L,QSA]

#rule 2
RewriteRule ^(engine)($|/) - [L]

#rule 3
RewriteRule ^(engine).* - [NC,L]

RewriteRule ^([^/\.]+).html$ index.php?controller=contents&method=viewGeneric&view=generic&link=$1 [L]

RewriteRule ^(/)?$ index.php?controller=contents&method=viewHome&view=home [L,QSA] # Default load

TL;DR 所以我的问题是:如何从我的其余 htaccess 规则中排除目录

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    TL;DR 所以我的问题是:如何从我的其余 htaccess 规则中排除目录

    您的第一条规则是这里的罪魁祸首。有这样的规则:

    Options +FollowSymLinks
    RewriteEngine on
    
    # skip engine from further rules
    RewriteRule ^engine($|/) - [L,NC]
    
    RewriteRule ^([^/\.]+)\.html$ index.php?controller=contents&method=viewGeneric&view=generic&link=$1 [L,QSA]
    
    RewriteRule ^/?$ index.php?controller=contents&method=viewHome&view=home [L,QSA]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      相关资源
      最近更新 更多