2013-03-11 2 views
2

У меня проблема с довольно старым siye. У меня есть общий URL-адрес с строкой запроса, которую я хочу перенаправить 301, но я не хочу, чтобы накладывать повторно URL-адреса. Я хочу выбрать, где каждая строка запроса перенаправляется, поскольку на сайте есть много разных категорий. Например:Htaccess Переписать строку с одним запросом

Я хочу изменить:

index.php?_a=viewCat&catId=199 

к:

/garden-furniture/patio-furniture/garden-benches-garden-seats/cat_199.html 

Но больной хочет изменить другой CATID другому URL моего выбора, совершенно другую структуру. У меня проблема с кодом, который у меня есть, если у меня нет? в конце URL-адреса назначения он работает, но добавляет строку запроса до конца, если я положил ее на конец, она не перенаправляется вообще.

код я использую:

RewriteCond %{QUERY_STRING} ^_a=viewCat&catId=199 
RewriteRule ^index\.php$ /garden-furniture/patio-furniture/garden-benches-garden-seats/cat_199.html? [L,R=301] 

Любая помощь будет оценен по достоинству!

EDIT: Остальная часть моего HTAccess

RewriteEngine On 
RewriteRule ^conservatory/(.*)$ /conservatory-furniture/$1 [R=301,L] 
RewriteRule ^dining-room/(.*)$ /dining-room-furniture/$1 [R=301,L] 
RewriteRule ^garden/(.*)$ /garden-furniture/patio-furniture/$1 [R=301,L] 



RewriteBase/
RewriteCond %{QUERY_STRING} (.*)$ 
RewriteRule cat_([0-9]+)(\.[a-z]{3,4})?(.*)$ index.php?_a=viewCat&catId=$1&%1 [NC] 

RewriteCond %{QUERY_STRING} (.*)$ 
RewriteRule prod_([0-9]+)(\.[a-z]{3,4})?$ index.php?_a=viewProd&productId=$1&%1 [NC] 

RewriteCond %{QUERY_STRING} (.*)$ 
RewriteRule info_([0-9]+)(\.[a-z]{3,4})?$ index.php?_a=viewDoc&docId=$1&%1 [NC] 

RewriteCond %{QUERY_STRING} (.*)$ 
RewriteRule tell_([0-9]+)(\.[a-z]{3,4})?$ index.php?_a=tellafriend&productId=$1&%1 [NC] 

RewriteCond %{QUERY_STRING} (.*)$ 
RewriteRule _saleItems(\.[a-z]+)?(\?.*)?$ index.php?_a=viewCat&catId=saleItems&%1 [NC,L] 
+0

Перенаправление должно работать независимо от того, перекрывая строку запроса или нет. Что происходит * точно *, когда вы добавляете знак вопроса в конце подстановки? А есть ли у вас другие правила? –

+0

Если я положу? в конце, тогда ссылка просто ломается при ее перенаправлении. Говорит, что он не может отобразить страницу (поэтому я предполагаю, что строка запроса не отправляется, поэтому нет страницы для создания?) У меня есть другие правила, они просто создают дружественные URL-адреса, к которым я перенаправляю. – user2099163

+0

Думаю, вместе с соответствующим другим правилом у вас бесконечный цикл. Возможно, этот другой ответ помогает http://stackoverflow.com/a/15165778/1741542 –

ответ

0

Если это полные URL-адреса, вы можете закрепить образец в начале строки

RewriteRule ^cat_([0-9]+)(\.[a-z]{3,4})?(.*)$ index.php?_a=viewCat&catId=$1&%1 [NC] 

это будет предотвратить URL, который имеет cat_ внутри переписывается на index.php?....

И так как вы не используете заднюю дополнительного части, вы могли бы устранить это слишком

RewriteRule ^cat_([0-9]+) index.php?_a=viewCat&catId=$1&%1 [NC] 

Еще один момент является RewriteCond строкой запроса. Если строка запроса не является обязательным, вы можете удалить RewriteCond и изменить RewriteRule с до

RewriteRule ^cat_([0-9]+) index.php?_a=viewCat&catId=$1 [QSA,NC] 

Итак, все это стало бы

RewriteRule ^cat_([0-9]+) index.php?_a=viewCat&catId=$1 [QSA,NC] 
RewriteRule ^prod_([0-9]+) index.php?_a=viewProd&productId=$1 [QSA,NC] 
RewriteRule ^info_([0-9]+) index.php?_a=viewDoc&docId=$1 [QSA,NC] 
RewriteRule ^tell_([0-9]+) index.php?_a=tellafriend&productId=$1 [QSA,NC] 
RewriteRule ^_saleItems index.php?_a=viewCat&catId=saleItems [QSA,NC,L] 
+0

Извините за задержку в возвращении к вам. Эти изменения полностью разрушают сайт. Все становится ошибкой 404. – user2099163

Смежные вопросы