从htaccess mod重写中排除子目录

时间:2014-01-29 11:09:00

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

我正在构建一个具有自动加载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。我想我可能会遗漏那条规则中需要附加其余请求的小规则。

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规则中排除目录

1 个答案:

答案 0 :(得分:0)

  

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]