RewriteRule для удаления лишнего сингла "?"в URL - PullRequest
0 голосов
/ 28 ноября 2018

Я использую файл конфигурации сервера IBM HTTP для перезаписи URL-адреса, перенаправленного с CDN.

По какой-то причине URL-адрес сопровождается лишним одиночным знаком вопроса, даже если строка запроса отсутствует.Например:

/index.html?

Я делаю перенаправление 301 для этого.Я хочу удалить один "?"из URL, но сохраните его, если есть какая-либо строка запроса.

Вот что я пробовал, но это не работает:

RewriteRule ^/index.html? http://localhost/index.html [L,R=301]

update : я пробовал этоправило с правильным регулярным выражением, но оно также никогда не сработает.

RewriteRule ^/index.html\?$ http://localhost/index.html [L,R=301]

Я попытался написать другое правило для перезаписи «index.html» в «test.html», и я ввел «index.html?»в браузере, он перенаправил меня на "test.html?"но не "index.html".

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вам нужно использовать хитрость, поскольку RewriteRule неявно совпадает только с компонентом пути URL.Хитрость заключается в том, чтобы просмотреть неразобранную строку исходного запроса:

RewriteEngine ON
# literal ? followed by un-encoded space.  
RewriteCond %{THE_REQUEST} "\? "
# Ironically the ? here means drop any query string.
RewriteRule ^/index.html /index.html? [R=301]
0 голосов
/ 28 ноября 2018

Вопросительный знак является специальным символом регулярного выражения, что означает «предыдущий символ является необязательным».Ваше правило на самом деле соответствует index.htm или index.html.

Вместо этого попробуйте поставить знак вопроса в «классе символов».Это , кажется, работает для меня:

RewriteRule ^/index.html[?]$ http://localhost/index.html [L,R=301]

($ для обозначения конца строки, например, ^ означает начало строки)

См. http://publib.boulder.ibm.com/httpserv/manual60/mod/mod_rewrite.html (для вашей версии Apache, которая не является последней)

Примечание из наших предыдущих попыток, экранирование знака вопроса, похоже, не работает.

Кроме того, я бы нажал CDN о том, почему этот вопросительный знак отправляется.Это не кажется нормальным паттерном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...