Url仅重写目录

时间:2011-08-30 07:11:06

标签: php .htaccess url-rewriting

目前我的根网站目录有一个.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目录

最好的方法是什么?

1 个答案:

答案 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)但它不存在,则仍会发生重写。