排除带有特定扩展名的 URL 以将其重定向到索引页

排除带有特定扩展名的 URL 以将其重定向到索引页

我有一组重写规则,可以将所有不存在的页面重定向到我的网站的索引:

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/thispageexistswww.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]对于具有这种()模式的规则, 该标志是不必要的^.*$(它根本没有区别)。

相关内容