Перенаправление со страницы React на экземпляр WordPress
У меня есть приложение Reacthttps://example.com/
и блог WordPress внутри в качестве подкаталога:
Проблема: во время просмотра я хочу, чтобы он был перенаправлен (301) на Но в настоящее время отображается ошибка 404, поскольку он рассматривается как страница реагирования.
Это мой корень:
# Disable directory indexes and MultiViews
Options -Indexes -MultiViews
# Prevent mod_dir appending a slash to directory requests
DirectorySlash Off
RewriteEngine On
# Prevent any further processing if the URL already ends with a file extension
RewriteRule \.\w{2,4}$ - [L]
# Redirect any requests to remove a trailing slash
RewriteRule (.*)/$ /$1 [R=301,L]
# Rewrite /foo to /foo.html if it exists
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule (.*) $1.html [L]
# Otherwise, rewrite /foo to /foo/index.html if it exists
RewriteCond %{DOCUMENT_ROOT}/$1/index.html -f
RewriteRule (.*) $1/index.html [L]
и вот мой WordPress:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteCond %{REQUEST_URI} !^/wp-json
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>
Что я могу сделать, чтобы перенаправитьhttps://example.com/blog
кhttps://example.com/blog/
? Это должно быть 301 перенаправление.
Я пробовал добавлять правила в.htaccess
для обоих случаев. Но ни то, ни другое не работает.
1 ответ
# Prevent mod_dir appending a slash to directory requests DirectorySlash Off
The DirectorySlash Off
Директива в корневом файле не позволит Apache (mod_dir) добавлять косую черту в подкаталог с перенаправлением 301. (Обычно mod_dir «автоматически» добавляет косую черту к перенаправлению 301, если она отсутствует в каталоге физической файловой системы.DirectorySlash On
это значение по умолчанию.)
Однако вы не можете просто удалить эту директиву, поскольку вы безоговорочно удаляете конечную косую черту из всех запросов далее в этом файле. (Я предполагаю, что это требование вашего приложения React?)
RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteCond %{REQUEST_URI} !^/wp-json RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
Вы добавляете конечные косые черты к запросам в файле, хотя уже слишком поздно, чтобы охватить сам каталог. (В этом случае файл на самом деле не обрабатывается.) И это правило, возможно, находится не в том месте, хотя это зависит от намерения (и в любом случае не имеет прямого отношения к этой проблеме).
Решение
Чтобы сохранить каталоги без косой черты в вашем приложении React (если это намерение?), вам нужно будет добавить пару дополнительных директив в корневой файл (сразу послеRewriteEngine
директива), которая явно добавляет косую черту в конце к/blog
.
Например:
# Allow mod_rewrite to match slash-less directory (Apache 2.4+)
RewriteOptions AllowNoSlash
# Redirect "/blog" to "/blog/"
RewriteRule ^blog$ /$0/ [R=301,L]
Где$0
обратная ссылка, содержащая полное совпадениеRewriteRule
шаблон .
Как только произойдет перенаправление,/blog/.htaccess
file запускается и эффективно переопределяет корневой файл.
В сторону: из вашего вопроса немного неясно, но похоже, что вы вручную отредактировали код внутри блока кода WordPress (между# BEGIN WordPress
/# END WordPress
маркеры комментариев) — это не рекомендуется. (Если вы не запретили WP изменять.htaccess
файл.)