我在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
答案 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:/]