Невозможно получить доступ к поддиректориям вне WordPress, так как WordPress перенаправляет их на 404 ошибку
Я ссылаюсь на этот ранее заданный вопрос, который не получил подходящего ответа: WordPress переопределяет существующие поддиректории а также Страницы/код вне "WordPress" получают ошибку 404
У меня та же проблема, и я перепробовала практически все решения, которые нашла в интернете. Это определенно связано с включенными постоянными ссылками в WordPress. Однако, я добавила новый файл .htaccess в поддиректорию с:
RewriteEngine off
и проблема все еще существует. Даже если я полностью удалю файл .htaccess WordPress, проблема остается.
Я также пробовала некоторые другие предложенные решения, такие как ErrorDocument 401 "Несанкционированный доступ" и ErrorDocument 404 "Несанкционированный доступ" и Redirect 301 /mysubdirectory http://www.mydomain.com/mysubdirectory/index.html в различных местах, но все безрезультатно.
Может ли кто-нибудь предложить другое решение? Единственный способ исправить это - отключить постоянные ссылки, но нам нужно, чтобы они были включены.
Спасибо,
Николь

Предполагаю, что WordPress установлен в корне вашего сайта, а внешние директории также находятся в корне. Проблема возникает из-за иерархии файлов .htaccess. Директивы из .htaccess верхнего уровня распространяются вниз и применяются ко всем вложенным директориям.
В этом случае у вас есть несколько вариантов:
Перенесите WordPress в отдельную директорию. См.: http://codex.wordpress.org/Moving_WordPress Если переместить WordPress в собственную директорию на том же уровне иерархии сервера, что и другие директории, правила перезаписи WordPress не будут влиять на них.
RewriteEngine Off - обычно это работает. Если не срабатывает, проверьте, не используете ли вы wildcard DNS. Wildcard-запись * в DNS, указывающая на ваш веб-сервер, может нарушать работу .htaccess и поддоменов.
В файле .htaccess в корне сайта добавьте следующий код ВЫШЕ директив WordPress:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^/subdirectoryname1/(.*)$ [OR] RewriteCond %{REQUEST_URI} ^/subdirectoryname2/(.*)$ [OR] RewriteRule ^.*$ - [L] </IfModule>
Один из этих способов должен вам помочь.

Спасибо! Я перепробовал кучу вариантов, но это единственное решение, которое сработало в моем случае: защищенная паролем поддиректория.

У меня тоже сработало, можно объяснение, что это делает и почему работает?

Если вы всё ещё получаете ошибки 404 при отключённом htaccess, проверили пути и уверены, что файлы существуют, то остаются только эти три варианта...
Варианты...
- Сервер, скорее всего, работает под управлением операционной системы с учётом регистра символов. Это означает, что если вы вводите путь без точного соответствия символов и их регистра, он просто не сработает.
- Права доступа: Возможно, у вас неправильные права доступа к файлу, папке или родительской папке. Попробуйте изменить права доступа на 755 для файлов, папок и родительских папок. Если у вас есть доступ через SSH (терминал), перейдите в корневую директорию и выполните команду
chmod -R 755 mydir
, чтобы рекурсивно установить права для всех элементов. - Если проблема сохраняется после всех этих действий, значит, у вас проблема с конфигурацией сервера (скорее всего, Apache). Вам нужно обратиться к вашему хостинг-провайдеру.
Если ничего из этого не помогло, значит, вам нужен новый хостинг.

Вижу, что эта тема уже несколько месяцев, но на всякий случай, если у вас так и не получилось решить проблему!
У меня была похожая ситуация, но моя проблема заключалась в том, что WordPress был установлен в поддиректории, что блокировало доступ по URL к папкам в корне (вне директории установки WP), но только когда включены постоянные ссылки. Для решения я скопировал (не переместил!) оба файла index.php и .htaccess из поддиректории с установкой WordPress и разместил их в корневой public_html (или любой другой поддиректории, которую вы пытаетесь использовать вне установки WP). Файл .htaccess уже содержит условия перезаписи для постоянных ссылок:
RewriteEngine On
RewriteBase /subdirectoryinstallfolder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Включите постоянные ссылки для обновления, и это решит все проблемы. Также убедитесь, что права доступа для корневых папок установлены правильно, так как это раньше вызывало у меня проблемы.

Когда я копирую свои файлы на тот же сервер, но в другую поддиректорию, то при попытке доступа к страницам index.php работает нормально, а другие страницы не работают и выдают ошибку 404. Извините за мой плохой английский!
Я посмотрел свой оригинальный .htaccess:
# BEGIN WordPress RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress
И заменил его на новый с указанием поддиректории:
# BEGIN WordPress RewriteEngine On RewriteBase /subdirectoryfolder RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /subdirectoryfolder/index.php [L] # END WordPress

Привет, @lizette. Добро пожаловать на форумы WPSE. Возможно, тебе будет полезно ознакомиться с правилами форматирования здесь.

Почти вырвав все волосы при редактировании htaccess, я наконец нашел решение, которое будет работать для WordPress.
Я столкнулся с этой проблемой после установки скрипта CodeIgniter в тот же корневой каталог, где установлен WordPress.
После попыток всех трюков, перечисленных здесь, я все равно получал 404 ошибки на страницах, связанных с новым скриптом.
Я заметил, что htaccess WordPress переопределял htaccess скрипта. Также я заметил, что другие установки WordPress в том же каталоге не имели этой ошибки 404.
Я просто взял htaccess из новой установки WordPress в том же серверном каталоге и добавил его в папку, где находится мой скрипт. Вот как это выглядит:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdirectoryname/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subdirectoryname/index.php [L]
</IfModule>
Замените subdirectoryname на имя вашего каталога и поместите этот файл htaccess в папку, где находится ваш скрипт.
Пример: Если сайт установлен здесь
public_html/
а новая папка находится по адресу
`public_html/example`
скопируйте htaccess выше и сохраните его внутри папки 'example', и это должно заработать.

Я неоднократно просматривал ответы здесь, так как столкнулся с похожей проблемой. У меня были файлы в подкаталоге, которые вызывали ошибку 404 при попытке доступа к ним. Все манипуляции с .htaccess не помогли исправить ситуацию, как и сказала Кирстен Дуглас, WordPress уже выполняет эту работу.
Мое решение
После проверки error_log на сервере я нашел эту статью. Я получал сообщение о неправильном uid для скриптов. Также я заметил, что ошибка 404 возникала не из-за отсутствия файла, а потому что сервер не мог отдать файл 500.html, то есть у меня была ошибка 500.
Оказалось, что я создавал файлы от имени root, и мне нужно было изменить владельца на владельца веб-файлов.
Надеюсь, это поможет другим, кто столкнулся с такой же проблемой!

Вы можете просто добавить директиву RewriteCond
, которая гарантирует, что правила WordPress будут игнорироваться для запросов внутри вашей поддиректории.
RewriteCond %{REQUEST_URI} !^/mysubdirectory
# остальные правила перезаписи WordPress
Однако, вы говорите, что проблема возникает даже без файла .htaccess
WordPress? Каково содержимое вашего .htaccess
в поддиректории?
