0

我的客户以大写字母打印了指向该网站的链接。我有一个 CI 安装,需要更改 htaccess 或基本控制器(我在 mo 中尝试了很多选项)以像这些示例一样工作(用户在他们的地址栏中键入它):

http://www.site.com/HAPPY/chappy -> http://www.site.com/happy/chappy

http://www.SITE.com/HaPpy/CHAPpy -> http://www.site.com/happy/chappy

http://WWW.Site.CoM/happy/chappY -> http://www.site.com/happy/chappy

等等......我似乎无法让 htaccess 简单地说“把所有东西都放进去,把它变成小写然后处理它”

这甚至可能..?

4

4 回答 4

0

是的,您可以在输入文本后立即将输入转换为小写字母。你可以用javascript来做到这一点。请参阅下面的代码狙击。

function makeLowercase() {
document.form1.outstring.value = document.form1.instring.value.toLowerCase();
}

<input name="outstring" type="text" value="" size="30" onkeyup="makeLowercase();" onblur="makeLowercase();">

或者您可以在 PHP 中使用 strtolower()函数将数据转换为小写并处理它。

于 2011-11-02T12:30:59.620 回答
0

您可以使用 .htaccess 重写主机名之后的部分(无论如何都不区分大小写):

http://www.chrisabernethy.com/force-lower-case-urls-with-mod_rewrite/

于 2011-11-02T12:31:44.007 回答
0

使用您自己的show_error函数扩展 CI_Exceptions 核心类。使用原始代码show_error,但在开头添加一个快速检查:

class MY_Exceptions extends CI_Exceptions {

    /**
     * General Error Page
     *
     * This function takes an error message as input
     * (either as a string or an array) and displays
     * it using the specified template.
     *
     * @access  private
     * @param   string  the heading
     * @param   string  the message
     * @param   string  the template name
     * @return  string
     */
    function show_error($heading, $message, $template = 'error_general', $status_code = 500)
    {
        // First try forwarding to all-lowercase URL if there were caps in the request
        if ($_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']))
        {
            header('Location: ' . strtolower($_SERVER['REQUEST_URI']));
            return;
        }
        /* Rest of original function to follow... */

根据需要进行自定义,请记住您可能希望使用大写的 URI 的其他部分。

您也可以使用pre_system(或 pre_controller)钩子实现类似的功能,但我个人只会在已经为其他目的启用钩子时才这样做。

于 2011-11-02T14:49:32.103 回答
0

您可以将核心路由库扩展为不区分大小写。那就是你放置strtolower()函数的地方。

将其添加到 404 错误处理程序是一个坏主意。

如果您想要源代码,LMK,但应该是扩展库、复制 1 个函数并添加strtolower().

于 2011-11-04T01:24:08.467 回答