Codeigniter删除index.php并在URL前加上www

时间:2015-12-12 00:27:42

标签: php .htaccess codeigniter

我想删除自带index.php的默认Codeigniter

我已经能够使用此代码删除它

RewriteRule ^(.*)$ index.php/$1 [L]
现在可以example.com/index.php/blog

访问

example.com/blog

我后来希望在URL前加www作为前缀,example.com/blog应该使用这些重写规则重定向到www.example.com/blog

RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]

将上面的代码添加到我的.htaccess文件的末尾后,它开始行为不端。

如果我将www.example.com/blog输入URL栏,则可以正常使用,但如果我输入example.com/blog,则会重定向到www.example.com/index.php/blog

我做错了什么?

我希望example.com/blog重定向到www.example.com/blog

注意:我正在使用Codeigniter框架。

已添加:此代码仅限于我之前的代码。也许这是问题,请帮助!!!

RewriteCond $1 !^{index\.php|[assests/images/themes/fonts/style/scripts/js/install]|robot\.txt|favicon\.ico}

3 个答案:

答案 0 :(得分:0)

试试这个:

RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ example.com/$1 [L,R=301] 

答案 1 :(得分:0)

经过很多技巧并在@Tpojka给出的post之后我能够想出这个

RewriteEngine On
RewriteBase /

# Removes trailing slashes (prevents SEO duplicate content issues)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]

# no www -> www
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]

# Checks to see if the user is attempting to access a valid file,
# such as an image or css document, if this isn't true it sends the
# request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

这家伙是我的问题

RewriteCond $1 !^{index\.php|[assests/images/themes/fonts/style/scripts/js/install]|robot\.txt|favicon\.ico}

我需要有关如何排除文件夹和某些文件的帮助,例如我在故障行中尝试过的robot.txt文件。

答案 2 :(得分:0)

这是我个人使用的完整.htaccess文件:

    <IfModule mod_rewrite.c>
    RewriteEngine On 

    RewriteCond %{HTTP_HOST} !^$
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 

    RewriteRule ^(.*)$ index.php?/$1 [L]
    </IfModule>