2011-04-01 41 views
1

我正在使用custom.conf文件进行重写和codeigniter以获取网站的某些功能,主要是文章。在使用mod_rewrite时获取原始REQUEST_URI AND mod_proxy

我的原始网址被重写,所以我有http://example.com/article-a101,它使用custom.conf文件来重写codeigniter/article/read/101。我想我必须使用mod_rewrite中的[P]标志将其作为代理调用发送,以使其在codeigniters .htaccess文件中再次重写。一旦它碰到代码点火器.htaccess,它将使用该mod重写结构来调用索引文件,并使用文章控制器和101中发送的读取函数作为参数。

我想知道的是我如何获得地址栏中的原始URL,因为它不在$ _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] 

这撑对用户隐藏一个更好的方法,我可以访问通过查询字符串中的原始地址,但没有按”这似乎是一个优雅的解决方案。

回答

1

我敢肯定,你不能用mod_rewrite 做任何其他的方式,但你可以用codeigniter路由。

$route['^([_a-zA-Z0-9-]+)-a([0-9]+)$'] = "article/read/$2"; 

假设你的控制器被命名为article,如果你访问/article-a101

然后$this->uri->uri_string();将返回article-a101您的功能被命名为read

(原始URL,它应该在你的网址栏现在)

$this->uri->ruri_string();将返回article/read/101(实际上你在那里)