Отключение правил перезаписи WordPress для папки и её содержимого через htaccess

4 мар. 2011 г., 17:18:00
Просмотры: 19.8K
Голосов: 5

У меня есть другое PHP приложение в папке с названием app внутри моей установки WordPress, и мне нужно отключить все правила перезаписи WordPress для этой папки и её содержимого. Чтобы при переходе на www.domain.com/app отображалась страница моего приложения, а не стандартная 404 страница WordPress.

Я знаю, что это довольно базовые правила перезаписи apache, я искал решение, пробовал некоторые варианты, но они не сработали должным образом.

Чуть не забыл, мне нужно сделать это только путем редактирования файла htaccess WordPress. При этом у приложения есть свой собственный файл htaccess.

Спасибо.

ПРАВКА: содержимое htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

ПРАВКА: htaccess приложения

DirectoryIndex index.php
<FilesMatch "\.(php|inc)$">
Order allow,deny
deny from all
</FilesMatch>
<FilesMatch "(index.php|download.php)$">
Order allow,deny
allow from all
</FilesMatch>

Эти правила не делают много, они в основном запрещают доступ ко всем файлам типа PHP и INC, кроме index.php и download.php. Это те файлы, к которым пользователю нужен доступ, остальные - это классы, используемые внутри PHP.

ПРАВКА 3: Решение:

Как оказалось, не было никаких проблем с файлом htaccess WordPress или приложением. После включения отчетов об ошибках на удаленном хостинг-сервере, PHP сообщил о поврежденном файле. После его замены всё начало работать корректно. Спасибо Wietse Venema за предложение.

8
Комментарии

@Fábio: Можешь также дать нам правила .htaccess из приложения? Это публичное приложение или разработано на основе публичного фреймворка (что-то, что мы можем знать)?

Jan Fabry Jan Fabry
4 мар. 2011 г. 18:36:37

@Jan Fabry: Конечно, секунду. Приложение не использует никакой фреймворк, было написано с нуля, просто для удовольствия и чтобы поддерживать хорошие привычки.

Fábio Antunes Fábio Antunes
4 мар. 2011 г. 19:05:18

если перейти на www.domain.com/app/index.php, ты также получаешь WordPress 404?

Wietse Venema Wietse Venema
4 мар. 2011 г. 20:19:17

@Wietse Venema: В любом другом месте внутри папки 'app' выдается ошибка Wordpress 404, в случае с index.php я просто получаю пустой ответ. Как будто в файле нет ничего для обработки.

Fábio Antunes Fábio Antunes
4 мар. 2011 г. 20:48:07

Просто для проверки: если вы добавите статический файл test.html с каким-нибудь текстом в директорию app/, вы также получаете Wordpress 404?

Wietse Venema Wietse Venema
4 мар. 2011 г. 22:50:07

Нет ошибки. Я получаю файл. Забавно, похоже, что внутри моей папки app PHP не выполняется.

Fábio Antunes Fábio Antunes
4 мар. 2011 г. 23:12:36

Возможно, код действительно выполняется, но вызывает ошибку, которую вы не видите. Попробуйте проверить лог ошибок или добавьте ini_set('display_errors', 1); error_reporting(E_ALL); сразу после открывающего тега <? в вашем index.php.

Wietse Venema Wietse Venema
4 мар. 2011 г. 23:38:24

@Wietse Venema: Я так комфортно разрабатывал и наблюдал, как всё работает на локальной машине, что даже не подумал, что что-то может быть не так. Как только я включил отображение ошибок на хостинге, сервер сообщил о повреждённом файле (вероятно, во время загрузки по FTP). После замены файла всё заработало как должно. Спасибо.

Fábio Antunes Fábio Antunes
5 мар. 2011 г. 00:56:56
Показать остальные 3 комментариев
Все ответы на вопрос 1
1

Стандартный файл .htaccess уже поддерживает нужное вам поведение:

# 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

Вся магия кроется в строках, начинающихся с RewriteCond. Они указывают Apache применить правило RewriteRule . /index.php [L] (что означает "любой URL будет перенаправлен на index.php"), только если URL не является существующим файлом !-f или существующей директорией !-d.

Таким образом, это должно работать по умолчанию. Правила перезаписи Wordpress не применяются, когда вы пытаетесь обратиться к уже существующему файлу.

4 мар. 2011 г. 17:55:13
Комментарии

Конечно, если приложение также использует перезаписи URL для перенаправления несуществующих адресов на себя, это не сработает. В этом случае вам понадобится специальное условие, что URL не должен начинаться с app/.

Jan Fabry Jan Fabry
4 мар. 2011 г. 18:35:03