Причина в том, что это происходит из-за mod_dir and the DirectorySlash
directive. По сути, если он видит URI без конечной косой черты и сопоставляется с существующим каталогом, он перенаправляет запрос так, чтобы он имел завершающую косую черту. Поскольку mod_dir и mod_rewrite находятся в разных местах в конвейере обработки URL-файлов, как mod_dir, так и mod_rewrite применяются к одному и тому же URL-адресу. Вот почему вы получаете перенаправление и странный URL-адрес с строкой запроса.
Если у вас обязательно должны быть каталоги без косых черт, вам необходимо повернуть DirectorySlash
. Проблема с его отключением заключается в том, что существует проблема безопасности раскрытия информации, которая заставит людей заглядывать в содержимое каталога , даже если у вас есть индексный файл. Это означает, что вам нужно компенсировать mod_dir с помощью mod_rewrite.
Так избавиться от правила:
RewriteRule ^(.*)/$ $1
и заменить его с этими правилами:
DirectorySlash Off
# redirect direct requests that end with a slash to remove the slash.
RewriteCond %{THE_REQUEST} \ /+[^\?\ ]+/($|\ |\?)
RewriteRule ^(.*)/$ /$1 [L,R]
# internally add the trailing slash for directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ /$1/ [L]
Thanks Jon! Это решило проблему;) – Javid