У меня есть три сайта, работающих на общем хостинге (Bluehost) с выделенным IP-адресом. Описание выглядит следующим образом:
example.com
=> это основной сайт и домен, это WPexample.net
=> это дополнительный домен (не знаю, знаком ли вам этот термин) и на нем работает другой сайт WPsubsite.example.net
=> это отдельное приложение PHPУ каждой WP своя .htacess
файл, который выглядит так:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
С этим .htaccess
file оба сайта WP работают нормально, но автономное приложение - нет. Если я удалю .htaccess
file тогда наоборот, автономное приложение работает, а сайты WP - нет.
Может ли кто-нибудь помочь мне найти решение этой проблемы?
Обновить
Я играю со следующей конфигурацией для .htaccess
файл для автономного приложения PHP:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
# Add Caching.
<FilesMatch ".(ico|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=10800"
</FilesMatch>
# Prevent viewing of htaccess file.
<Files .htaccess>
order allow,deny
deny from all
</Files>
# Prevent directory listings
Options All -Indexes
# Compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
но не работает, так как я выхожу из приложения, как только нажимаю на любую ссылку.
Автономный сайт находится по адресу /public_html/plataforma
пока WP живет в /public_html
. Почему я сейчас делаю не так?
Создайте .htaccess
файл для вашего автономного приложения PHP, который перенаправит ваш код на subsite.example.net
Важна основная структура файлов / каталогов. Если эти 3 сайта по существу находятся в одной учетной записи - в одном родительском каталоге - тогда каждый сайт, вероятно, находится в отдельном подкаталоге (что часто является тем, как аддоны и поддомены по умолчанию в общей среде), и у вас должен быть отдельный .htaccess
файл в каждом подкаталоге. Не один на всех.
ОБНОВЛЕНИЕ №1: Попробуйте добавить исключение в WordPress .htaccess
чтобы специально исключить любые перезаписи при доступе через поддомен. Например:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{HTTP_HOST} !^subsite\.example\.net$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Однако на самом деле в этом нет необходимости, поскольку (как упоминалось в комментариях) директивы mod_rewrite в автономном приложении .htaccess
файл должен полностью переопределить их (поскольку автономное приложение находится в подкаталоге).
Другое предостережение с добавлением кода в WordPress
блок состоит в том, что он может быть перезаписан при следующем обновлении.
ОБНОВЛЕНИЕ №2: В качестве альтернативы попробуйте добавить RewriteOptions
директива автономного приложения .htaccess
файл (находится в подкаталоге):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions IgnoreInherit
:
Если это сработает, то можно предположить, что есть RewriteOptions InheritDown[Before]
директива в конфигурации сервера, которая позволяет наследовать директивы mod_rewrite в родительском каталоге. Обратите внимание, что IgnoreInherit
и InheritDown[Before]
являются функциями Apache 2.4+.
(РЕДАКТИРОВАТЬ: кажется, что OP находится на Apache 2.2.31, поэтому указанная выше директива приводит к ошибке внутреннего сервера 500.)
ОБНОВЛЕНИЕ # 3: Вы также можете попробовать удалить RewriteBase /
директива от обоих .htaccess
файлы и удалите префикс косой черты в WordPress RewriteRule
замена чтобы соответствовать правилам в автономном приложении .htaccess
файл. Итак, WordPress .htaccess
файл становится:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END WordPress
Последняя строка ранее читалась: RewriteRule . /index.php [L]
(т.е. с префиксом косой черты). Косая черта указывает путь URL-адреса относительно корня, без косой черты он теперь относится к каталогу, содержащему .htaccess
файл.