Перезапись мода .htaccess без перенаправления

Мне нужно переписать очень простой мод на wordpress (с настройками .htaccess по умолчанию). Мне нужно перенаправить из категории test1 в test2

То, что я пытаюсь сделать, терпит неудачу. Я думаю, мне здесь не хватает чего-то базового

<IfModule mod_rewrite.c>
Options FollowSymLinks
Options -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^test1/$ test2/$ #returns 404

#alternatively this one returns 404 too: RewriteRule ^/test1/$ test2/$

</IfModule>

Есть ли у вас другие директивы в вашем файле .htaccess? Порядок важен.

DocRoot 31.10.2018 13:25

Кроме того, укажите полные URL-адреса, с которыми должно совпадать это перенаправление.

DocRoot 31.10.2018 13:42

@это были самые первые директивы, к тому же это полные каталоги

RWS 31.10.2018 13:45
1
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
RewriteRule ^test1/$ test2/$ #returns 404

Если mod_rewrite включен и вы попробовали именно эту строку, вы получите 500 Internal Server Error, потому что у вас недопустимый аргумент флаги. Вы должны явно указать, что это перенаправление с флагом R, иначе вы получите внутренняя перезапись.

Кроме того, второй аргумент директивы RewriteRule - это обычная строка, а не регулярное выражение, поэтому конечный $ на test2/$ недействителен.

Любые внешние перенаправления также должны быть выше существующих директив WordPress (например, фронт-контроллера).

Попробуйте следующее вместо приведенного выше:

Options +FollowSymLinks -MultiViews

RewriteEngine On

RewriteRule ^test1/$ /test2/ [R=302,L]

# BEGIN WordPress
# ... Rest of .htaccess file goes here

Это перенаправляет одиночный URL-адрес /test1/ на /test2/.

Меняйте 302 (временный) на 301 (постоянный) только после того, как вы проверите, что он работает нормально. (Это, конечно, только в том случае, если это должно быть постоянным.)

Обертка <IfModule> здесь не требуется.


alternatively this one returns 404 too: RewriteRule ^/test1/$ test2/$

Это ничего не сделает в контексте каталога (.htaccess) из-за префикса косой черты на RewriteRuleшаблон.

Тот факт, что вы получаете 404 для первой директивы, предполагает, что эти директивы на самом деле не обрабатываются ?!

Я изменил объявление опции на Options +FollowSymLinks -MultiViews и средство для удаления RewriteBase /, и это сработало! Хотя второй аргумент не является регулярным выражением, он все же начал помещать эти символы $ в конец URL-адреса, а раньше это было просто 404. Большое спасибо!

RWS 31.10.2018 13:48
Options FollowSymLinks (нет префикса + или -) overwrites the existing setting. By prefixing + `или -, который вы добавляете или удаляете (вы не можете смешивать префикс без префикса с префиксными значениями в одной директиве). Вместо директивы RewriteBase я поставил перед целевым URL-адрес косую черту (предпочтительно для "перенаправления"). Что касается конечного $ ... убедитесь, что кеш вашего браузера очищен, поскольку ошибочные перенаправления 301 будут постоянно кэшироваться браузером.
DocRoot 31.10.2018 14:10

Еще раз спасибо за разъяснения. Кэширование перенаправления - очень неприятная вещь для всех, кто может прочитать этот комментарий в будущем. Вы можете очистить кеш перенаправления в Chrome, поместив его в адресную строку chrome: // net-internals / # events, а затем выбрав «Очистить кеш» в меню (открывается из верхнего правого треугольника)

RWS 31.10.2018 14:27

Другие вопросы по теме