0

我正在开发基于 CodeIgniter 的应用程序。我的 htacess 看起来像这样:

RewriteEngine On
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteBase /
RewriteRule ^(.*)$ /index.php?$1 [L]
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

这在大多数情况下都很好用,我可以像这样访问控制器和方法:

http://example.com/controller/method/args

但是,如果它附加了一个 www,像这样

http://www.example.com/foo

它重定向到

http://example.com/index.php?foo

显示的页面始终是我网站的索引页面。

我添加了最后一对 RewriteCond / RewriteRule 只是为了删除(如​​果www存在)。

我不太确定如何让它以我想要的方式工作,所以

http://www.example.com/foo

只是重定向到

http://example.com/foo

编辑

从我的 CI 配置文件:

$config['base_url'] = 'http://example.com/';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';
4

2 回答 2

3

如评论中所述。

你的重写规则RewriteRule ^(.*)$ /index.php?$1 [L]应该放在底部。在这种情况下,由于您的[L]旗帜,订单很重要。

于 2012-07-05T20:33:02.553 回答
1

在这里并没有真正提供比 Steven Lu 更多的东西……但清理了您的订单以使其更有意义

RewriteEngine On
RewriteBase /

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

RewriteCond  %{REQUEST_FILENAME} !-f
# You don't really need the !-d (directory) flag here
RewriteRule ^(.*)$ /index.php [L] # Could put QSA in here too, but CI doesn't play too nice with query strings 
于 2012-07-05T20:39:03.657 回答