2017-01-22 3 views
0

Я пытаюсь сделать 301 переадресацию с помощью htaccess с сервером speedpeed без везения.Apache 301 перенаправление с параметрами получения

Мне нужно сделать URL-адрес для перенаправления URL-адреса без каких-либо связанных параметров.

, например:

от: http://www.example.com/?cat=123

к: http://www.example.com/some_url

Я пробовал:

RewriteRule http://www.example.com/?cat=123 http://www.example.com/some_url/ [R=301,L,NC] 

Любая помощь будет оценена.

+0

Вам нужно будет опубликовать свой код встроенного в вопрос. Без этого мы не сможем вам помочь. Итак, какие правила вы пытались «не повезло»? – arkascha

+0

Я добавил код, который я пытался использовать. – yaniv14

ответ

0

Благодарим за добавление кода на ваш вопрос. Еще раз посмотрим, насколько это важно:

Ваша проблема заключается в том, что RewriteRule делает не работает с URL-адресами, а по путям. Так что вам нужно что-то подобное вместо:

RewriteEngine on 
RewriteRule ^/?$ /some_url/ [R=301,L,NC,QSD] 

Из Вашего вопроса не ясно, если вы хотите игнорировать любые параметры GET или если вы хотите только для перенаправления, если некоторые параметры установлены. Так вот вариант, который будет получить только применяется, если какой-то параметр фактически установлен в запросе:

RewriteEngine on 
RewriteCond %{QUERY_STRING} (?:^|&)cat=123(?:&|$) 
RewriteRule ^/?$ /some_url/ [R=301,L,NC,QSD] 

Другое дело, что на самом деле не получить ясно, если вы хотите, чтобы все адреса ниже http://www.example.com/ (так ниже пути /) для переписывания или только для этого точного URL. Если вы хотите сохранить любой потенциальный компонент дальнейшего пути запроса и еще переписать (например http://www.example.com/foo => http://www.example.com/some_url/foo), то вам необходимо добавить захват в качестве регулярного выражения и повторно использовать захваченные компоненты пути:

RewriteEngine on 
RewriteRule ^/?(.*)$ /some_url/$1 [R=301,L,NC,QSD] 

Для любого из для работы вам потребуется интерпретация файлов стиля .htaccess с помощью команды AllowOverride. Подробнее см. Официальную документацию модуля перезаписи. И вы должны позаботиться о том, что файл стиля -htaccess на самом деле читается процессом http-сервера и что он находится прямо внутри папки http hosts DOCUMENT_ROOT в локальной файловой системе.


И общий совет: вы должны всегда предпочитают размещать такие правила в конфигурации HTTP-сервера хоста вместо использования .htaccess файлов стилей. Эти файлы, как известно, подвержены ошибкам, трудно отлаживаются, и они действительно замедляют работу сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет контроля над конфигурацией хоста (читай: действительно дешевые хостинг-провайдеры) или если у вас есть приложение, которое опирается на составление собственных правил перезаписи (что является очевидным кошмаром безопасности).

+0

Я думаю, что '[^ | &] cat = 123 [& | $]' должен быть '(?:^| &) Cat = 123 (?: & | $)' И '?' (Или 'QSD' флаг для Apache> = 2.4) отсутствует в конце адресата, чтобы фактически удалить исходную строку запроса (Apache скопирует старый здесь). – julp

+0

@julp Спасибо за подсказки! – arkascha

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