我正在构建一个具有自动加载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规则中排除目录
答案 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]