.htaccess Переписать подкаталог Wordpress без нарушения работы других подкаталогов.

Aug 20 2020

Итак, у меня установлен WordPress, /wp/но я хочу, чтобы все URL-адреса WordPress были переписаны, чтобы они отображались в корневом каталоге. В настоящее время у меня это работает (см. Ниже), но я хочу изменить свой, .htaccessчтобы он не нарушал другие подкаталоги.

Например, если я хочу посетить www.example.com/images/image.png, он в настоящее время перенаправляет меня на страницу 404 в WordPress.

Это вообще возможно с .htaccess?

Текущий код:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]

Обновление : протестировано предложение MrWhite в режиме инкогнито и во втором браузере. Нет эффекта. Новый .htaccessфайл:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]
# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

Ответы

MrWhite Aug 21 2020 at 01:54

Вам необходимо добавить условие для исключения существующих файлов, в противном случае запрос /images/image.pngбудет, естественно, перезаписан /wp/images/image.pngи вызовет 404 в WordPress (если на /wp/images/image.pngсамом деле не существует).

Например, добавьте к существующему правилу следующее условие:

# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

ОБНОВЛЕНИЕ: похоже, это не сработало. Все еще идет на страницу WordPress 404

Вы поместили RewriteCondдирективу не в то место.

RewriteCondдирективы не являются полностью отдельными утверждениями, это условия, которые применяются к следующей RewriteRuleдирективе. Сами по себе RewriteCondдирективы ничего не делают.

В RewriteCondдирективе должна идти (куда угодно) , прежде чем в RewriteRuleдирективе:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]

Кроме того, для справки просмотрите .htaccessфайл «WordPress» в /wpподкаталоге. Это делает то же самое.

Кроме того: если у вас нет нескольких доменов или поддоменов, которые вы не хотите переписывать, вы можете удалить проверку имени хоста (т.е. RewriteCondдирективу, которая проверяет HTTP_HOSTпеременную сервера).