目前我的根网站目录有一个.htaccess,可以重定向到我的应用程序文件夹,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/ [L]
RewriteRule (.*) app/$1 [L]
</IfModule>
在/ app目录中我有另一个.htaccess,其中包含以下内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
此时,在我的PHP中,我可以使用$ _GET ['url']来获取请求的URL。这一切都很好,很好。但是,我要做的是,如果请求的URL是一个目录,只有它重写,如果请求的URL是一个文件,它实际上将重定向到该文件以供查看。我不确定这是否可以完全通过.htaccess完成,或者如果在php中有一种方法可以进行is_file
检查,然后将标题重定向到文件中?
现在,如果我进行is_file
检查并执行标头重定向,我会被置于循环中,因为webroot中的htaccess显然想要重定向到/ app目录
最好的方法是什么?
答案 0 :(得分:2)
我仍然不是100%明确需要什么,希望这就是你所要求的。如果没有 - 请告诉我。
在网站root .htaccess中再添加一条规则,告诉Apache忽略对现有文件的请求:
<IfModule mod_rewrite.c>
RewriteEngine On
# do not rewrite requests to existing files
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule . - [L]
RewriteRule ^$ app/ [L]
RewriteRule (.+) app/$1 [L]
</IfModule>
显然,如果请求了文件(例如example.com/test.php
)但它不存在,则仍会发生重写。