Получение оригинального REQUEST_URI при использовании mod_rewrite И mod_proxy - PullRequest
1 голос
/ 02 апреля 2011

Я использую файл custom.conf для переписывания и codeigniter для некоторых функций сайта, в основном для статей.

Мой исходный URL переписывается, поэтому у меня есть http://example.com/article-a101,, при этом файл custom.conf используется для перезаписи на codeigniter / article / read / 101. Я думаю, что я должен отправить это как вызов через прокси-сервер, используя флаг [P] в mod_rewrite, чтобы он снова перезаписывался в файле codeigniters .htaccess. Как только он попадает в воспламенитель кода .htaccess, он использует эту структуру перезаписи мода для вызова индексного файла и использует контроллер статьи и функцию чтения, отправляемую в 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]

Это скрыто от пользователя, и я могу получить доступ к исходному URL через строку запроса, но это не выглядит элегантным решением.

1 Ответ

1 голос
/ 06 апреля 2011

Я почти уверен, что вы не можете сделать это любым другим способом с mod_rewrite, но вы можете сделать это с маршрутизацией codeigniter.

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

при условии, что ваш контроллер называется article, а ваша функция - read

, если вы посетили /article-a101

, тогда $this->uri->uri_string(); вернет article-a101 (исходный URL, который теперь должен быть в вашей строке URL)

и $this->uri->ruri_string(); вернется article/read/101 (где вы на самом деле)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...