Я думаю, что проблема в том, что после того, как Apache переписывает / news в / subdirectory / news, он находит запрос, соответствующий каталогу в файловой системе, который НЕ заканчивается косой чертой. Таким образом, он создает редирект на новый URL, включая косую черту.
Дело в том, что на самом деле мы хотим, чтобы добавлялась наклонная черта для сохранения канонического URL (в противном случае мы получим / news и / news /, ведущие в одно и то же место - не очень хорошо для относительных ссылок, SEO и т. Д.) Просто не совсем так, как это делает Apache. Поэтому мы должны сделать это сами, добавив следующее:
RewriteCond %{REQUEST_URI} ^/subdirectory/.*[^/]$
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdirectory/(.*)$ /$1/ [L,R=301]
Условия этого правила будут соответствовать любым запросам, которые начинаются с «подкаталога», НЕ совпадают с каталогом на fielsysem, но НЕ заканчиваются косой чертой. (например, «/ подкаталог / новости»). Затем rewriterule выдает постоянное перенаправление на тот же путь, но заканчивается косой чертой и удаляет «subdiretcory» (например, «/news/').
».
Затем клиент выдаст запрос на «/ news /», apache перезапишет его в / subdirectory / news / и не будет выполнять перенаправление, потому что оно заканчивается косой чертой.
Быстро проверил это, и, кажется, это сработало.