将www重写为非www和index.php CI

时间:2013-10-01 21:14:45

标签: php .htaccess codeigniter

我正在使用CodeIgnter,因为我的所有链接都是base.com/index.php/home/indexwww.base.com/index.php/home/index。 如果可能的话,我想将它们显示为base.com/home/index。我试图通过互联网查看,从两者中获取重写:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$0 [PT,L]  
RewriteCond %{HTTP_HOST} ^domain\.com\$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com\$
RewriteRule ^/?$ "http\:\/\/domain\.com\/" [R=301,L]

RewriteEngine on
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

将它们分开放置,它们起作用。但是它们不会做我需要它们做的事情。 有人知道解决方案吗?谢谢。

1 个答案:

答案 0 :(得分:7)

对于CI,您需要类似第一组规则的内容,但不需要重定向。但是重定向需要在路由发生之前发生,所以请尝试:

RewriteEngine On

# redirect www to non-www
RewriteCond %{HTTP_HOST} ^www\.base\.com$ [NC]
RewriteRule ^(.*)$ http://base.com/$1 [L,R=301]

# redirect direct requests to /index.php to remove it
RewriteCond %{THE_REQUEST} \ /index\.php/?([^\?\ ]*)
RewriteRule ^ http://base.com/%1 [L,R=301]

# internally route to /index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [PT,L]