htAccess 重写规则 - 全部索引.php但服务器 404 用于丢失的文件



我目前有:

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 地址(这很好)并将所有丢失的文件/目录重定向到索引.php

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

我尝试删除"重写Cond %{REQUEST_FILENAME} !-f",但它以"由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用"限制内部递归"来增加限制。使用"日志级调试"来回溯一下。 :(

我尝试了大约 3 个小时,现在添加一些与丢失文件匹配的规则并执行 R=404,但它效果不佳:(

感谢您的任何帮助

将你的规则替换为:

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]

您需要在索引之前捕获丢失的图像.php catch-all 块。在 www -> 域转换的 RewriteCond/RewriteRule 之后添加以下内容:

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

最新更新