301 перенаправление с параметрами запроса и ~ в URL - PullRequest
0 голосов
/ 12 февраля 2019

У меня проблема с перенаправлением, когда я хотел бы полностью перенаправить URL-адрес с параметрами запроса в другой PDF-файл, например:

Исходный URL: https://www.foo.bar.com/~/bar.pdf?la

URL-адрес перенаправления: https://www.bar.foo.com/foo.pdf

В настоящее время мое правило переписывания выглядит следующим образом:

RewriteRule ^/~/bar.pdf?la https://www.bar.foo.com/foo.pdf [R=301,L,NC]

Как написать перенаправление 301, которое учитывает тильду и параметр запроса?

Спасибо зазаранее за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Во-первых, у вашего правила RewriteRule ^/~/bar.pdf?la https://www.bar.foo.com/foo.pdf [R=301,L,NC] есть несколько проблем.

Во-первых, RewriteRule ^/ здесь не применимо, поэтому достаточно RewriteRule ^.Во-вторых, вы должны экранировать ~ как этот RewriteRule ^\~ и, наконец, не пишите строку запроса с RewriteRule, как bar.pdf?la, потому что она не является частью URI.

Строка должнавыглядеть следующим образом:

RewriteRule ^\~/bar.pdf https://www.bar.foo.com/foo.pdf [R=301,L,NC]

Но строка запроса может добавляться к новой цели, чтобы предотвратить добавление ? в конце цели:

RewriteRule ^\~/bar.pdf https://www.bar.foo.com/foo.pdf? [R=301,L,NC]

Если вы хотитеиспользуйте значение строки запроса, вы можете добавить условие перед этим, чтобы использовать его:

RewriteCond %{QUERY_STRING} ^(.*)$

вы можете изменить ^(.*)$ на что угодно, и вы можете использовать его в target, как в этом примере:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$  https://www.whatever.com/%1/$1 [R=301,L,NC]

Итак, %1 относится к этому условию RewriteCond %{QUERY_STRING} ^(.*)$ и $1 относится к этому условию RewriteRule ^(.*)$ и т. Д.

0 голосов
/ 12 февраля 2019

Вам необходимо использовать директиву RewriteCond для проверки строки запроса URL.Вы не можете сделать это в RewriteRule.Строка запроса в вашем URL: la.

RewriteEngine on

RewriteCond ℅{QUERY_STRING} ^la$ [NC]
RewriteRule ^.*bar\.pdf$ /foo.pdf? [L,R=301]
...