作者:虚线老母阳 | 来源:互联网 | 2024-12-08 20:57
在尝试优化网站的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]