mod_rewrite为空REQUEST_FILENAME

时间:2010-01-28 13:00:48

标签: php .htaccess mod-rewrite

我在.htaccess文件中有这个:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !\.(gif|jpg|png|css|js|ico|flv|php|txt)$ index.php

现在我需要添加另一个规则,如果没有找到REQUEST_FILENAME,它将转发到index.html。

因此www.mysite.com将转发至index.html,www.mysite.com / file.html将转发至index.php。

2 个答案:

答案 0 :(得分:2)

我通常使用这种重写规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

它会重写index.php中不存在的所有网址。

答案 1 :(得分:1)

只需添加另一条规则,不受URL路径结尾的限制:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !\.(gif|jpg|png|css|js|ico|flv|php|txt)$ index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html

但是使用默认错误处理可能会更好:

ErrorDocument 404 /index.html

否则,对于非现有文件的请求,您的服务器将不会使用404响应。