Специальное правило перезаписи в htaccess с отрицанием слова

Я пытался переписать или перенаправить 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 ^wp-blog/((?!wp-admin).)*$ [NC] - недопустимое условие перезаписи. вы пропустили аргумент тестовой строки.
Amit Verma 03.04.2018 11:55

RewriteCond не работает, вам нужно указать переменную / значение или что-то, что вы хотите проверить для начала. (Обычно вы хотите проверить REQUEST_URI или REQUEST_FILENAME в таких случаях.) RewriteCond и RewriteRule работают «как команда», поэтому вам не нужно втиснуть все это в условие. Сделайте условие проверки только того, что запрошенное не начинается с /wp-blog/wp-admin, а затем пусть RewriteRule позаботится о сопоставлении части wp-blog.

CBroe 03.04.2018 11:58
Redirect 301 ^wp-blog/((?!wp-admin).)*$ / blog/$1 никогда не будет работать из-за неподдерживаемого шаблона Regex.
Amit Verma 03.04.2018 12:02

Итак, согласно вашим комментариям, я не могу проверить, не перенаправляет ли regex + rewriteCond. Так что сейчас я вижу что-то, чего трудно достичь. Любые идеи?

Marcos Pérez Gude 03.04.2018 12:08

Лучшее, что я могу сделать, это что-то вроде RewriteRule ^wp-blog/((?!wp-admin).)*$ /blog/$1 [R=301,L,NC], но если это не сработает, я не знаю, как заставить его работать.

Marcos Pérez Gude 03.04.2018 12:10
«Итак, согласно вашим комментариям, я не могу проверить с помощью regex + rewriteCond без перенаправления». - нет, это не то, что кто-то сказал ...
CBroe 03.04.2018 12:12

Извините за плохое понимание английского. Затем вы сказали мне, что я могу проверить request_uri и перенаправить на / blog, но wp-admin мне нужно проверить дополнительный URI. Это возможно?

Marcos Pérez Gude 03.04.2018 12:16

Я пробую несколько вещей с rewritecond, но безуспешно. Пример: RewriteCond %{REQUEST_URI} /(wp-blog)/((?!(wp\-admin|wp\-json|wp\-login)).)* [NC] RewriteRule ^/wp-blog/(.*)$ /blog/$1 [R=301,L]

Marcos Pérez Gude 03.04.2018 12:24

Пример 2: Options +FollowSymLinks RewriteRule ^wp-blog/((?!(wp\-admin|wp\-json|wp\-login)).)*$ /blog/$1 [R=301,L]

Marcos Pérez Gude 03.04.2018 12:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
169
2

Ответы 2

Не нужно ничего делать с .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. Спасибо за ваш ответ

Marcos Pérez Gude 03.04.2018 12:07

Вы можете использовать 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), поэтому я буду играть с комбинациями, и если я не могу решить, я спрошу вас снова. Большое спасибо за ответ!

Marcos Pérez Gude 03.04.2018 12:53

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