开发者

Getting the original REQUEST_URI when using mod_rewrite AND mod_proxy

开发者 https://www.devze.com 2023-02-21 18:48 出处:网络
I\'m using a custom.conf file for rewrites and codeigniter for some features of the site, mainly the articles.

I'm using a custom.conf file for rewrites and codeigniter for some features of the site, mainly the articles.

My original url gets rewritten, so I have http://example.com/article-a101, this uses the custom.conf file to rewrite to codeigniter/article/read/101. I think I must send this as a proxy call using the [P] flag in mod_rewrite to make it rewrite again in codeigniters .htaccess file. Once it hits the code igniter .htaccess, it uses that mod rewrite structure to call the index file and use the article controller and the read function sending in the 101 as the parameter.

What I'm trying to figure it is how do I get the original url in the address bar as its not in the $_SERVER variable. Since I use the [P] on the first rewrite, request_uri has 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]

Here's my current solution that I know there must be a better method for

RewriteRule ^/([_a-zA-Z0-9-]+)-a([0-9]+)$ /codeigniter/article/read/$2?orig_url=%{REQUEST_URI}&%{QUERY_STRING} [P,L]

This stays hidden开发者_如何学Go from the user, and I can access the original url through the query string, but doesn't seem like an elegant solution.


I'm pretty sure you cant do it any other way with mod_rewrite but you could do it with codeigniter routing.

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

assuming your controller is named article and your function is named read

if you visited /article-a101

then $this->uri->uri_string(); would return article-a101 (the original url, which should be in your url bar now)

and $this->uri->ruri_string(); would return article/read/101 (where you actually are)

0

精彩评论

暂无评论...
验证码 换一张
取 消