htaccess重写规则 - 全部到index.php但服务器404用于丢失文件

时间:2015-04-18 20:18:36

标签: apache .htaccess mod-rewrite redirect

我目前:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.domain.com
RewriteRule (.*) http://domain.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1 [L]

它从www重定向。到非www地址(这是好的) 并将所有丢失的文件/目录重定向到index.php

但我想改变它: 用户请求丢失文件(domain.com/something.jpg) 得到404错误代码而不是主页,它可以过滤任何。*或只有一些扩展名,如.png | .jpg | .jpeg

我尝试删除" RewriteCond%{REQUEST_FILENAME}!-f", 但它以"由于可能的配置错误而超过了10个内部重定向的限制而结束。使用' LimitInternalRecursion'必要时增加限额。使用' LogLevel debug'至 获得回溯。" :(

我尝试了3个小时,现在添加一些匹配丢失文件并执行R = 404的规则,但它不能正常工作:(

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

用以下内容替换您的规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.domain.com
RewriteRule (.*) http://domain.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|tiff|css|js)$ [NC]
RewriteRule (.*) index.php/$1 [L]

答案 1 :(得分:0)

您需要在index.php catch-all块之前捕获丢失的图像。在之后添加此 www - >的RewriteCond / RewriteRule域名转换:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} .*\.(jpg|png)$
RewriteRule (.*) - [L,R=404]