htaccess RewriteRule не работает должным образом, если нет косой черты

1

Я пытаюсь перенаправить один подкаталог на другой, используя RewriteRule в основном каталоге.htaccess.

Например: http://website.com/subdir следует переписать на http://website.com/another_dir/destination_dir, но пользователь должен по-прежнему видеть http://website.com/subdir в адресной строке.

Это отлично работает, если пользователь заканчивает URL с завершающей косой чертой. Пример: http://website.com/subdir/ (Генерирует 200

Однако, если косая черта опущена, создается 301 переадресация, и мы видим нежелательный каталог назначения. Например, http://website/subdir перенаправляет пользователя на http://website/another_dir/destination_dir

Вот соответствующие разделы.htaccess:

# URL Rewriting:
RewriteEngine On
RewriteBase /

...

# Redirect subdirectories:
RewriteRule ^subdir(.*)$ another_dir/destination_dir$1 [PT,NC,QSA,L]

Любая помощь приветствуется!

Теги:
.htaccess
redirect
mod-rewrite

2 ответа

1

Вы можете отрегулировать регулярное выражение в правиле rewrite для необязательного совпадения с косой чертой.

RewriteRule ^subdir(/?.*)$ another_dir/destination_dir$1 [PT,NC,QSA,L]

Обратите внимание на /? сразу после subdir. Это говорит о том, что может быть или не быть слэш сразу после вашего subdir, поэтому регулярное выражение будет соответствовать в любом случае.

0

Быстрое исправление будет

DirectorySlash OFF в этом htaccess и DirectorySlash ON.htaccess в another_dir/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню