0

我正在使用带有 mod_rewrite 和 codeigniter 的 apache 来进行路由。

我有两个单独的(通配符)域指向我的网站,例如:*.foo.com 和 *.bar.com

*.foo.com/somepath 应该重写为 *.foo.com/index.php/somepath

和 *.bar.com.somepath 应该重写为 *.bar.com/index.php/bar/somepath

这是我的 .htaccess:

RewriteEngine on

RewriteCond %{HTTP_HOST} [^.]{3}\.bar\.com [NC]
RewriteCond $1 !(index\.php|assets|favicon|bar)
RewriteRule ^(.*)$ /index.php/pzdossier/$1 [L] 

RewriteCond $1 !(index\.php|assets|favicon)
RewriteRule ^(.*)$ /index.php/$1 [L]

当我去 dev.foo.com/whatever 时,这给了我正确的结果

但是当我去 dev.bar.com/whatever 时,它只是重写为 dev.bar.com/index.php/whatever 而不是 pzdossier。

如果我改变

 RewriteRule ^(.*)$ /index.php/pzdossier/$1 [L] 

 RewriteRule ^(.*)$ /index.php/pzdossier/$1 [L,R=302] 

它有效,我被重定向到/index.php/pzdossier/whatever。

我究竟做错了什么?为什么重定向有效,但重写无效?

4

1 回答 1

0

Codeigniter 使用 $_SERVER['request_info'] 来确定要调用的控制器。

当我将其更改为 $_SERVER['PATH_INFO'] 时,它正确地使用了我想要的 .htaccess 规则。

所以将 application/config/config.php $config['uri_protocol'] 更改为 PATH_INFO

于 2013-05-28T09:42:05.160 回答