Назад | Перейти на главную страницу

.htaccess останавливает работу сайта, в то время как сайты WP работают, почему?

У меня есть три сайта, работающих на общем хостинге (Bluehost) с выделенным IP-адресом. Описание выглядит следующим образом:

У каждой 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 файл.