Попробуйте следующие директивы mod_rewrite в верхней части вашего .htaccess
файла:
RewriteEngine On
RewriteRule ^(.*?)https?:/ /$1 [R=301,L]
Это просто удаляет любую завершающую часть в URL-пути, которая начинается http:/
(или https:/
).
ОБНОВЛЕНИЕ: ?
в подкаталоге захвата (.*?)
делает его нежадным, поэтому он фиксирует только до первого вхождения https:/
и отбрасывает остальные, а нечем до последнего вхождения (жадный) и зацикливания (цикл перенаправления) до тех пор, пока не будут удалены все вхождения https:/
.
Дополнительные примечания:
Первый тест с 302 (временным) перенаправлением, чтобы убедиться, что он работает.Измените значение на 301 только после подтверждения, чтобы избежать проблем с кэшированием.
В URL-пути, который соответствует шаблону RewriteRule
, уже уменьшены последовательности косых чертодинарные косые черты, поэтому вы не можете сопоставить //
(двойная косая черта) здесь (но я не думаю, что вам нужно).
Если есть строки запроса, то выможет потребоваться немного другой подход и другая директива, поскольку сама строка запроса (в отличие от URL-пути) может содержать «повторный URL», который необходимо удалить (сначала нам нужно будет увидеть пример).Шаблон RewriteRule
соответствует только URL-пути, но не строке запроса.
В Windows: если двоеточие (схема и) (:
)) появляется в первом сегменте пути (т. е. неверно сформированная ссылка предназначена для корня документа), после чего Apache сгенерирует 403 Forbidden , прежде чем .htaccess
сможет перенаправить.Вы ничего не можете сделать, чтобы избежать этого, так как это ограничение ОС (двоеточия не допускаются в путях файловой системы - 403 возникает, когда Apache пытается сопоставить URL-адрес с путем в файловой системе).Это не происходит в Linux.Например: https://example.com/https://example.com/
.
ОБНОВЛЕНИЕ: Если вы не видите перенаправления, просто 404, то вам может потребоваться включить дополнительная информация о пути (PATH_INFO) в ваших URL.Например, в верхней части файла .htaccess
:
AcceptPathInfo On