我最近在 .htaccess 中添加了以下内容以删除尾部斜杠:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
我还扩展 CI_URI 以删除不允许的 URI 字符并重定向到 404 页面(感谢原作者,而不是我!):
public function _filter_uri($str)
{
if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE)
{
// preg_quote() in PHP 5.3 escapes -, so the str_replace() and addition of - to preg_quote() is to maintain backwards
// compatibility as many are unaware of how characters in the permitted_uri_chars will be parsed as a regex pattern
if ( ! preg_match('|^['.str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-')).']+$|i', $str))
{
show_404(); //show 404 error page instead "The URI you submitted has disallowed characters" error
}
}
// Convert programatic characters to entities and return
return str_replace(
array('$', '(', ')', '%28', '%29'),
// Bad
array('$', '(', ')', '(', ')'),
// Good
$str);
}
}
由于我添加了 .htaccess 代码,URI 中任何不允许的字符,例如http://www.mysite.com/contro,ller/func,tion(带逗号)都会导致重定向到 301 页面,随后链接到404 错误页面(即“页面已移至此处”,带有指向我的标准 404 页面的链接)。
我可以让两者一起工作,所以不允许的字符只是重定向到我的标准 404 页面?