我有一组重写规则,可以将所有不存在的页面重定向到我的网站的索引:
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
基本上,当前规则是将每个非目录或文件的 URL 重定向到 index.php,因此www.example.com/thispageexists
,www.example.com/thispagedoesntexist
也会www.example.com/missingfile.xml
转到 index.php 页面。如果 CMS 中不存在该 URL,则会向用户触发 404 错误。
我想排除任何具有某些文件扩展名的 URL,比如.(js|css|ico|gif|jpg|png|xml|html|swf|ttf|eot)$
,即使该文件不存在,也不会被重定向。
我仍然想继续将不存在的页面定向到index.php,但是不是如果 URL 以任何这些文件扩展名结尾。
答案1
规则很简单:
RewriteRule \.(js|css|ico|gif|jpg|png|xml|html|swf|ttf|eot)$ - [NC,L]
只需将其放在正确的位置(规则的顺序很重要):例如,前这行:RewriteRule ^.*$ index.php [NC,L]
附言[NC]
对于具有这种()模式的规则, 该标志是不必要的^.*$
(它根本没有区别)。