Я запускаю (для клиента) сайт Wordpress на сервере CentOS / WHM / Apache 2.2, и в подкаталоге у нас установлен AWStats. Все работает нормально, пока мы не применим защиту паролем через файл htaccess. При наличии защиты паролем это приводит к ошибке 404 при попытке просмотра AWStats.
После долгих проб и ошибок мы обнаружили, что все дело в правилах Wordpress htaccess.
Их можно настроить следующим образом:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# The following line is the line we added
RewriteCond %{REQUEST_URI} ^wp-content/stats(.*)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
(AWStats был установлен в подпапке wp-content, так как это приводит к наименьшему количеству проблем с Wordpress)
Что работало нормально, пока автоматическое обновление Wordpress не стерло все изменения и не восстановило этот блок htaccess по умолчанию. Внесение этого изменения и удаление маркеров # Begin / End Wordpress приводит к 500 ошибкам повсюду, когда происходит следующее обновление Wordpress, поскольку оно просто добавляет еще один из этих блоков.
Все, что я пробовал, похоже, не работает.
Что я пробовал:
Добавление условия перезаписи htaccess с писать самому себе правило отдельно, как до, так и после сегмента Wordpress. Это приводит к проблеме 404.
Добавление условия перезаписи htaccess с писать самому себе в файле htaccess в каталоге AWStats. Это приводит к проблеме 404.
Добавление файла htaccess в каталог AWStats с помощью директивы; RewriteEngine Off. Это приводит к проблеме 404.
Создание поддомена для каталога AWStats. Это просто приводит к ошибке конфигурации в AWStats (которую я, похоже, не могу исправить, поэтому для тех, кто лучше меня понимает параметры конфигурации AWStats, возможно, сможет использовать это решение).
Снятие парольной защиты. Не идеально, этот сайт уже стал целью спамеров комментариев Wordpress, спамеров рефереров и всех остальных PITA, которые хотят злоупотребить плохим беззащитным сайтом Wordpress.
Я хотел бы решить эту проблему, не предоставляя клиенту доступ к cPanel, поскольку они хотят, чтобы несколько человек имели доступ к статистическим данным в AWStats (да, у нас также есть аналитика, установленная на сайте, клиент хочет, чтобы AWStats также), которые не должны иметь доступа ко всему, что им может дать cPanel.
Есть ли у кого-нибудь предложения или опыт решения этой конкретной проблемы?
Единственное решение, которое я нашел, - это вручную отредактировать один из основных файлов Wordpress, чтобы эта строка включалась при обновлении постоянных ссылок.
В wp-включает / класс-wp-rewrite.php начиная со строки 1512 (WP v4.6.1), в mod_rewrite_rules()
метод в WP_rewrite
класс:
$rules = "<IfModule mod_rewrite.c>\n";
$rules .= "RewriteEngine On\n";
$rules .= "RewriteBase $home_root\n";
// Prevent -f checks on index.php.
$rules .= "RewriteRule ^index\.php$ - [L]\n";
И именно здесь я добавил свою строчку.
$rules .= "RewriteCond %{REQUEST_URI} ^wp-content/stats(.*)\n";
(Этот метод продолжается для гораздо большего количества строк до завершения блока команд Wordpress в файле .htaccess, если нужно отредактировать что-либо из них самостоятельно, просто отредактируйте, где вам нужны директивы, чтобы они располагались в последовательности)
Я собираюсь работать над настраиваемой функцией, чтобы взять на себя это в теме, которую я сделал для этого клиента, чтобы обрабатывать любые изменения в этих файлах во время обновлений Wordpress. Это было быстрое и грязное решение.