Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: mod_rewrite
 
 автор: Nixon   (10.03.2006 в 18:35)   письмо автору
 
 

Здравствуйте.

На моём сервере необходимо выполнить следующее внутреннее преобразование:

http://www.somesite.ru/feedback/contact/a23aab43bs -> http://www.somesite.ru/feedback/contact/?id=a23aab43bs


Для этого я использовал следующий код в .htaccess:

RewriteEngine  On
RewriteBase    /feedback/contact/

RewriteCond    %{REQUEST_URI}  ^/feedback/contact/(.*)$             [NC]
RewriteCond    %{REQUEST_URI}  !^/feedback/contact/index.html(.*)$  [NC]
RewriteRule    ^(.+)$          ?id=$1



Всё хорошо, но только есть одна проблема с полноценностью преобразования. Вместо того, чтобы:

http://www.somesite.ru/feedback/contact/a23aab43bs.html?parametr=value -> http://www.somesite.ru/feedback/contact/?id=a23aab43bs.html%3Fparametr=value

mod_rewrite отбрасывает всё, что находится после знака вопроса и получается следующее:

http://www.somesite.ru/feedback/contact/a23aab43bs.html?parametr=value -> http://www.somesite.ru/feedback/contact/?id=a23aab43bs.html

В документации по mod_rewrite (http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html) сказано, что mod_rewrite должен кодировать знак вопроса и представлять в URL-безопасном виде, но, как видно из примера, данное не происходит.

Помогите, пожалуйста!

   
 
 автор: JIEXA   (11.03.2006 в 01:45)   письмо автору
 
   для: Nixon   (10.03.2006 в 18:35)
 

Попробуйте следующий код:

RewriteEngine  On 
RewriteBase    /feedback/contact/ 

RewriteCond    %{REQUEST_URI}  ^/feedback/contact/(.*)$             [NC] 
RewriteCond    %{REQUEST_URI}  !^/feedback/contact/index.html(.*)$  [NC] 
RewriteRule    ^(.+)$          ?id=$1&%{QUERY_STRING}

   
 
 автор: Nixon   (11.03.2006 в 15:57)   письмо автору
 
   для: JIEXA   (11.03.2006 в 01:45)
 

Большое спасибо за совет, JIEXA!

В модифицированном виде вариант решения поставленной задачи выглядит так:

RewriteEngine  On
RewriteBase    /feedback/contact/

RewriteCond    %{REQUEST_URI}      ^/feedback/contact/(.*)$  [NC]
RewriteCond    %{SCRIPT_FILENAME}  !-f
RewriteCond    %{QUERY_STRING}     ^$
RewriteRule    ^(.+)$              ?id=$1                    [L]

RewriteCond    %{REQUEST_URI}      ^/feedback/contact/(.*)$  [NC]
RewriteCond    %{SCRIPT_FILENAME}  !-f
RewriteCond    %{QUERY_STRING}     !^$
RewriteRule    ^(.+)$              ?id=$1?%{QUERY_STRING}


Осталось толька проблема его оптимизации... Мне так кажется, что на mod_rewrite это сделать будет слегка проблематично...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования