热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优化.htaccess规则以清理URL

本文探讨了如何通过调整.htaccess文件中的重定向规则,有效地清理URL并解决潜在的内部重定向错误。

在尝试优化网站的URL结构时,我发现当前的.htaccess文件设置并不完全有效:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L]
RewriteRule ^(.*)$ /blah/index.php/$1 [L]

目标是将类似/blah/about.php的URL重定向到更简洁的形式/blah/about。同时,由于使用了CodeIgniter框架,需要确保所有的请求都能通过中央控制器(index.php)进行处理。

尽管重定向功能看似正常,但在访问/blah/about时却遇到了内部服务器错误。

编辑 - 错误日志:

日志显示,请求超过了10次内部重定向的限制,这可能是由于配置不当造成的。可以通过使用LimitInternalRecursion指令来增加此限制,或通过提高日志级别至debug来获取详细的错误回溯信息。

解决方案:

为了修复这个问题,建议调整最后一行重定向规则如下:

RewriteRule ^(.*)$ /blah/index.php?/$1 [L]

虽然我对CodeIgniter没有特别的经验,但通常情况下,框架设计为将所有请求路由到一个中心点,以便更好地控制和处理请求。此外,参考CodeIgniter官方文档中的mod_rewrite示例,可以帮助确保配置符合最佳实践。

更新:

进一步检查发现,第二个RewriteRule也应包含前面的条件检查,以避免不必要的重定向循环。正确的配置应该是:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blah/index.php/$1 [L]


推荐阅读
author-avatar
虚线老母阳
推荐一首歌《春风十里》,我的个人订阅号:虚线老母阳
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有