.htaccess 301 перенаправить добавление запросов в конец URL - PullRequest
0 голосов
/ 23 января 2012

Я надеюсь, что кто-то может помочь с необычной ситуацией.

У меня есть одно основное правило перезаписи в моем файле httpd.conf, которое обрабатывает весь наш динамический контент.Правило выглядит так и работает нормально:

RewriteRule ^ (. ) (/. / d /[^.]*)$ /category/refine.cgi \? \ & A \= $ 2

Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь использовать .htaccess для создания простого перенаправления 301, параметры запроса автоматически добавляются в конец URL-адреса, поэтому конечный результат выглядит следующим образом:

http://www.example.com/category/page.html?&a=/category/subcategory/something/d/page/

Обратите внимание, что строка запроса добавляется к URL-адресу при использовании .htaccess для создания перенаправления 301.

У меня есть решение для этого в каждом конкретном случае, но нецелесообразно создавать новое правило каждый раз, когда я хочу сделать простое перенаправление 301.

Итак, мне интересно, могу ли я каким-либо образом редактировать свое "основное правило", чтобы при использовании .htaccess для создания перенаправлений параметры запроса не добавлялись к целевому URL.

Заранее благодарим за любую помощь, которую вы можете оказать.

Ответы [ 2 ]

0 голосов
/ 23 января 2012

Если у вас есть несколько простых перенаправлений, для которых вы хотите подавить значения строки запроса, вы можете поместить все перенаправления в RewriteMap (поскольку у вас уже есть доступ к httpd.conf) и иметь один .htaccess. правило, которое подавляет строки запроса, как показано ниже

место в htaccess

#if there is a match in the map
RewriteCond ${redirect_map:$1} !=""
RewriteRule ^(.*)$ ${redirect_map:$1}? [R,L]

место в httpd.conf

RewriteEngine On
RewriteMap redirect_map txt:/usr/local/apache/conf/redirect.map

содержимое /usr/local/apache/conf/redirect.map ключ, за которым следует пробел, за которым следует цель

directory/subdirectory1/subdirectory2/ example/category7/subdirectory/file.html
directory4/subdirectory2/subdirectory9/ example/category5/subdirectory4/file332.html 
0 голосов
/ 23 января 2012

Это то, что ваше правило определило для этого:

RewriteRule ^(.)(/./d/[^.]*)$ /category/refine.cgi\?\&a\=$2

В нем говорится, что нужно создать URL-адрес, который будет выглядеть следующим образом: category / fine.cgi? & A = / foo / bar /

Если вы не хотите, чтобы это произошло, измените ваше правило на:

RewriteRule ^(.)(/./d/[^.]*)$ /category/refine.cgi\?
...