У меня есть сайт, использующий mod_rewrite для создания красивых URL-адресов ... везде, где я читал, удаление завершающей косой черты хорошо для SEO, поэтому я придерживался правила:
RewriteRule ^(.+)/$ /$1 [R=301,L]
Я думаю, что 301 редирект может повлиять на производительность, но это не мой вопрос ...
Дело в том, что удаление завершающей косой черты вызывает у меня цикл, когда я пытаюсь получить доступ к index.php существующего подкаталога, например: http://mysite.com/a-real/directory/
Насколько я понимаю, mod_rewrite пытается удалить завершающую косую черту, но в данном случае этого не предполагалось.
Как я могу это исправить? Держу пари, что это довольно простое решение, но мне неизвестно.
Вам, вероятно, следует посмотреть документацию для mod_dir
Редирект "завершающая косая черта" выдается, когда сервер получает запрос на URL.
http://servername/foo/dirname
где dirname - это каталог. Для каталогов требуется косая черта в конце, поэтому mod_dir перенаправляет наhttp://servername/foo/dirname/
.
Этот модуль, вероятно, снова добавляет косую черту после того, как вы ее удалили и т.д. и т.д. Вы можете отключить это поведение с помощью DirectorySlash
директива.
Самым простым решением, вероятно, будет указание .htaccess не перенаправлять, если файл или каталог существует.
Добавьте в условие следующие две строки, чтобы предотвратить это.
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
(Вы также можете добавить -l, если используете каталоги / файлы с символическими ссылками)
Кроме того, как вы предлагаете, отбросьте 301, так что ваш полный доступ к htaccess будет:
Options +FollowSymLinks
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.+)/$ /$1 [L]