我正在使用custom.conf文件对网站的某些功能进行重写和codeigniter,主要是文章。
我的原始网址被重写,所以我有http://example.com/article-a101,这使用custom.conf文件重写为codeigniter / article / read / 101。我想我必须使用mod_rewrite中的[P]标志将其作为代理调用发送,以使其在codeigniters .htaccess文件中再次重写。一旦它点击代码点火器.htaccess,它就使用该mod重写结构来调用索引文件,并使用文章控制器和101中的读取函数作为参数发送。
我想弄清楚的是如何在地址栏中获取原始网址,因为它不在$ _SERVER变量中。因为我在第一次重写时使用了[P],所以request_uri有codeigniter / article / read / 101。
custom.conf
RewriteRule ^/([_a-zA-Z0-9-]+)-a([0-9]+)$ /codeigniter/article/read/$2 [P,L]
codeigniters .htaccess, fairly basic
RewriteRule ^(.*)$ index.php?/$1 [L]
这是我当前的解决方案,我知道必须有一个更好的方法
RewriteRule ^/([_a-zA-Z0-9-]+)-a([0-9]+)$ /codeigniter/article/read/$2?orig_url=%{REQUEST_URI}&%{QUERY_STRING} [P,L]
这对用户来说是隐藏的,我可以通过查询字符串访问原始网址,但看起来不是一个优雅的解决方案。
答案 0 :(得分:1)
我很确定你不能用mod_rewrite以其他方式做到这一点 但你可以用codeigniter路由来做。
$route['^([_a-zA-Z0-9-]+)-a([0-9]+)$'] = "article/read/$2";
假设您的控制器名为article
且您的函数名为read
如果您访问过/article-a101
然后$this->uri->uri_string();
将返回article-a101
(原始网址,现在应该在您的网址栏中)
和$this->uri->ruri_string();
将返回article/read/101
(您实际所在的位置)