Apache 从htaccess mod rewrite中排除子目录

Apache 从htaccess mod rewrite中排除子目录,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我正在构建一个站点,它有一个自动加载php函数来检查控制器中是否存在类名。该函数位于index.php中,在站点上的每个url上运行,然后根据需要使用php重定向 我在我的文档根目录中添加了一个名为engine的新子目录。在这个子目录中,有一些单独的类需要运行,而不需要通过文档根目录中main index.php中的autoload函数 我正在寻找一个.htaccess规则,它允许我将引擎子目录和其中的所有文件/文件夹从默认重写规则中排除,默认重写规则加载index.php 下面是我的.htac

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

我在我的文档根目录中添加了一个名为engine的新子目录。在这个子目录中,有一些单独的类需要运行,而不需要通过文档根目录中main index.php中的autoload函数

我正在寻找一个.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 so我的问题是:如何从我的htaccess规则中排除目录

TL;DR so我的问题是:如何从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]