通过mod_rewrite设置cookie失败

时间:2016-06-29 09:56:29

标签: apache .htaccess codeigniter mod-rewrite cookies

我在CodeIgniter之上构建一个站点。要使URI看起来更漂亮CI使用mod_rewrite规则

RewriteCond $1 !^(index\.php|img|css|js|fonts|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [NC]

现在,我希望允许用户以特定语言请求网页,即处理正常https://example.com/home和特定语言https://example.com/spa/home。在这个阶段,创建新控制器对我来说非常麻烦,所以我想设置语言cookie并重写原始URI。在阅读了关于mod_rewrite的一些好文章之后,我想出了这个

RewriteCond %{QUERY_STRING} ^(eng|spa|ger|fre)/(.*) [NC]
RewriteRule ^(.*)$ %2 [R,NC,QSA,CO=lang:%1:.example.com:1440:/]
RewriteCond $1 !^(index\.php|img|css|js|fonts|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [NC]

但是,当我尝试访问https://example.com/spa/home时,URI未被重写,{not} not cookie未设置,并且返回404 Page Not Found错误。

我的猜测是我的规则与原始的CodeIgniter规则存在冲突。是吗?这是我唯一的错误吗?

非常感谢!

UPD:Apache / 2.4.10

2 个答案:

答案 0 :(得分:1)

/spa/home是一个uri而不是querystring,所以你需要匹配%{REQUEST_URI}变量,如下所示

RewriteCond %{REQUEST_URI} ^/(eng|spa|ger|fre)/(.*) [NC]
RewriteRule ^(.*)$ /%2 [R,NC,QSA,CO=lang:%1:.example.com:1440:/]

答案 1 :(得分:1)

试试这个:

RewriteCond %{REQUEST_URI} ^/(eng|spa|ger|fre)/(.*) [NC]
RewriteRule ^(eng|spa|ger|fre)/(.*)$ /$2 [R,NC,QSA,CO=lang:%1:ubtv.local:1440:/]
相关问题