如何重写URLS以删除index.php并使用codeigniter强制小写?

时间:2011-04-08 16:36:16

标签: .htaccess codeigniter mod-rewrite

我无法使用.htaccess同时执行这两项操作。

删除index.php正在运行,但尝试添加强制小写会导致抛出500错误。我正在使用codeigniter。任何帮助表示赞赏!

这是我的.htaccess代码:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

2 个答案:

答案 0 :(得分:1)

如果你只想强制小写,建议的PHP代码不起作用。下面是正确的PHP代码。

$url = $_SERVER['REQUEST_URI'];
$pattern = '/([A-Z]+)/';

if(preg_match($pattern, $url)) {
    $new_url = strtolower($url);

    Header( 'HTTP/1.1 301 Moved Permanently' );
    Header( 'Location: ' . $new_url );
    exit;
}

// your code here

此处的讨论Force lowercase .htaccess

答案 1 :(得分:0)

那是因为这是不可能的,让我解释一下。

  1. 删除index.php仍会将所有请求发送到index.php / yadda / yadda,因此请求的uri仍然包含index.php,即使您没有看到它或将其添加到URL中。
  2. 重定向(由第二次重写规则触发)使索引部分为空,因此您将获得mysite.com/index.php/lowercase/
  3. 但除此之外,只能在你的Httpd.conf文件中声明RewriteMap,你可以在那里声明:

    RewriteMap  lc int:tolower
    

    然后在你的.htaccess文件中使用你的变量lc,但是再次只有两个中的一个会赢,你不能同时拥有它们。

    您将获得URL小写或让网站在不使用index.php的情况下工作,因为它们总是会因为每个人的性质而发生冲突。

    真的是我能看到它发生的唯一方法是在php中,就像这样:

    $this->load->helper('url');
    $your_URL = uri_string();
    preg_match_all('/[A-Z]/', $your_URL, $match) ;
    $total_count = count($match [0]);
    if($total_count > 0){
        $new_line = strtolower($your_URL);
        redirect($new_line);
    }
    

    这个我会把你的课程的主要结构放进去,我希望这能帮到你。