2013-04-08 4 views
0

Скажите, что я хотел http://domain.com/product/?id=123 стать http://domain.com/product/foo, как это сделать в .htaccess? Я пробовал что-то вроде этого, но это не помогло:mod rewrite строк запроса

RewriteCond %{QUERY_STRING} ^id=123$ [NC] 
RewriteRule ^/product$ /product/foo [NC,L,R=301] 

Предложения?

ПРИМЕЧАНИЕ: Мне не нужно фиксировать значение параметра id, поскольку я не буду использовать его в новом URL-адресе.

UPDATE 1:

RewriteEngine On 
RewriteBase /fisher 

RewriteCond %{QUERY_STRING} ^id=123 [NC] 
RewriteRule ^product/$ /product/foo [NC,L,R=301] 
  1. Показаны RewriteEngine и RewriteBase
  2. Удалить $ в RewriteCond
  3. Удалить / в RewriteRule

Когда я иду в http://localhost/fisher/product/?id=123 ничего не происходит. URL-адрес остается тем же.

+0

Постарайтесь избавиться от косых черт в начале вашего шаблона RewriteRule. Пути не начинаются с косой черты в файле .htaccess, потому что файлы .htaccess выполняются для каталога, в котором они находятся. (Обратите внимание, что пути RewriteRule начинаются с прямой косой черты в файле httpd.conf.) – Bobulous

+0

Обновлен мой вопрос. – snoopy76

ответ

0

Очистить кэш браузера и перезапустить браузер, попробуйте следующее:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase /fisher 

RewriteCond %{QUERY_STRING} ^id=123 [NC] 
RewriteRule ^product/?$ product/foo? [NC,L,R=302] 

После того, как вы убедитесь, что он работает нормально, то изменить R=302 к R=301

+0

Не могли бы вы рассказать о своем решении? Имейте в виду, что 'id = 123' может перенаправляться на' product/foo', тогда как 'id = 999' может перенаправляться на' product/bar'. – snoopy76

+0

Сделано редактирование, чтобы сделать его конкретным для 'id = 123'. Я использую переменную mod_rewrite '% {THE_REQUEST}', которая представляет собой исходный HTTP-запрос, полученный веб-сервером Apache из браузера. – anubhava

+0

Почему бы не использовать 'QUERY_STRING'? Кроме того, я попробовал ваше условие/правило и перешел на http: // localhost/fisher/product /? Id = 123'. Ничего не произошло. Он не изменил мой URL. – snoopy76

0

http://localhost/fisher/product/?id=123

Принимая выше URL, как пример запроса, вы можете попробовать это в файле .htacces в каталоге /fisher:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} ^/fisher/product/? [NC] 
RewriteCond %{QUERY_STRING} id=123   [NC] 
RewriteCond %{REQUEST_URI} !/foo   [NC] 
RewriteRule .*  /fisher/product/foo?  [R=301,L,NC] 

Для внутреннего и немого отображения, замените [R = 301, L, NC] с [L, NC]

+0

У меня на самом деле нет каталога «рыбалка». Я использую CodeIgniter, и он сопоставляет каждый файл контроллера с сегментом URI. Это что-то меняет? – snoopy76

+0

Думаю, все. Не могли бы вы разместить пример URL со структурой каталогов, подобной реальной, чтобы иметь возможность изменить ответ? –