.htaccess Переписать подкаталог Wordpress без нарушения работы других подкаталогов.
Итак, у меня установлен 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
Ответы
Вам необходимо добавить условие для исключения существующих файлов, в противном случае запрос /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
переменную сервера).