Я пытался переписать или перенаправить URL-адрес с помощью регулярного выражения, основанного на отрицании слова.
Сценарий следующий:
У меня Wordpress установлен на example.com/wp-blog, но визуализация осуществляется через API на example.com/blog. Мне нужно отключить доступ к /wp-blog и перенаправить его на /blog, но сохранив доступ к /wp-blog/wp-admin.
Я пробую следующее условие на htaccess:
RewriteCond ^wp-blog/((?!wp-admin).)*$ [NC]
RewriteRule ^(.*)$ /blog/$1 [R=301,L]
Но безуспешно.
Я тоже пробую это:
Redirect 301 ^wp-blog/((?!wp-admin).)*$ /blog/$1
А также это:
RewriteRule ^wp-blog/wp-admin $ /wp-blog/wp-admin $1 [L,NC]
RewriteRule ^wp-blog/wp-login.php $ /wp-blog/wp-login.php $1 [L,NC]
RewriteRule ^wp-blog/(?!.*wp-admin)$ /blog/$1 [R=301,L,NC]
У меня нет успеха со всеми комбинациями, которые я пробую. Итак, как я могу перенаправить / перезаписать /wp-blog на /blog, но с доступом к /wp-blog/wp-admin?
Большое спасибо.
RewriteCond не работает, вам нужно указать переменную / значение или что-то, что вы хотите проверить для начала. (Обычно вы хотите проверить REQUEST_URI или REQUEST_FILENAME в таких случаях.) RewriteCond и RewriteRule работают «как команда», поэтому вам не нужно втиснуть все это в условие. Сделайте условие проверки только того, что запрошенное не начинается с /wp-blog/wp-admin, а затем пусть RewriteRule позаботится о сопоставлении части wp-blog.
Redirect 301 ^wp-blog/((?!wp-admin).)*$ / blog/$1 никогда не будет работать из-за неподдерживаемого шаблона Regex.
Итак, согласно вашим комментариям, я не могу проверить, не перенаправляет ли regex + rewriteCond. Так что сейчас я вижу что-то, чего трудно достичь. Любые идеи?
Лучшее, что я могу сделать, это что-то вроде RewriteRule ^wp-blog/((?!wp-admin).)*$ /blog/$1 [R=301,L,NC], но если это не сработает, я не знаю, как заставить его работать.
Извините за плохое понимание английского. Затем вы сказали мне, что я могу проверить request_uri и перенаправить на / blog, но wp-admin мне нужно проверить дополнительный URI. Это возможно?
Я пробую несколько вещей с rewritecond, но безуспешно. Пример: RewriteCond %{REQUEST_URI} /(wp-blog)/((?!(wp\-admin|wp\-json|wp\-login)).)* [NC] RewriteRule ^/wp-blog/(.*)$ /blog/$1 [R=301,L]
Пример 2: Options +FollowSymLinks RewriteRule ^wp-blog/((?!(wp\-admin|wp\-json|wp\-login)).)*$ /blog/$1 [R=301,L]






Не нужно ничего делать с .htaccess, все, что вы можете сделать, - это напрямую с WordPress.
это можно сделать в два этапа
Шаг 1: в корне создайте index.php с содержимым ниже
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog/wp-blog-header.php' ); /** here wp-blog is place as your folder name */
Шаг 2: теперь измените «staging.domain.com» на «staging.domain.com/wp-blog» в своей базе данных (для этого загрузите sql> открыть и отредактировать для замены> загрузить новый sql).
Теперь у вас полный сайт работает по URL-адресу staging.domain.com, но файлы вызываются из папки "wp-blog".
Если я сделаю это, я получу wordpress на staging.domain.com, но я разрабатываю блог через REST API, поэтому для меня это неприменимо. Мне нужно, чтобы мой сайт был показан, но с сохранением доступа к wp-blog/wp-admin. Спасибо за ваш ответ
Вы можете использовать request_uri, чтобы проверить, является ли следующий путь wp-admin, затем напишите правило, чтобы переписать все на /blog:
RewriteCond %{REQUEST_URI} ^/?wp-blog(?!/wp-admin)
RewriteRule ^/?wp-blog(/.*)? blog$1 [R=301,L]
Хорошо, работает частично. Он работает с моим корневым файлом .htaccess, но внутри wp-blog у меня есть файл htaccess wordpress. Если я удалю wordpress htaccess, я не смогу получить доступ к REST API (на /wp-blog/wp-json), поэтому я буду играть с комбинациями, и если я не могу решить, я спрошу вас снова. Большое спасибо за ответ!
RewriteCond ^wp-blog/((?!wp-admin).)*$ [NC]- недопустимое условие перезаписи. вы пропустили аргумент тестовой строки.