Я запускаю (для клиента) сайт 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 с правилом write-to-self в файле htaccess в каталоге AWStats. Это приводит к проблеме 404.
Добавление файла htaccess в каталог AWStats с помощью директивы; RewriteEngine Off. Это приводит к проблеме 404.
Создание поддомена для каталога AWStats. Это просто приводит к ошибке конфигурации в AWStats (которую я, кажется, не могу исправить, поэтому тот, кто лучше меня разбирается в параметрах конфигурации AWStats, может использовать это решение)
Удаление защиты паролем. Не идеально, этот сайт уже стал целью спамеров комментариев Wordpress, спамеров-рефереров и всех остальных PITA, которые хотят злоупотребить плохим беззащитным сайтом Wordpress.
Я хотел бы решить эту проблему, не предоставляя клиенту доступ к cPanel, поскольку они хотите, чтобы несколько человек имели доступ к статистическим данным в AWStats (да, у нас также установлена аналитика на сайте, клиент хочет также AWStats ), который не должен иметь доступа ко всему, что может дать ему cPanel.
Есть ли у кого-нибудь предложения или опыт решения этой конкретной проблемы?
Единственное решение, которое я нашел - вручную отредактировать один из основных файлов Wordpress, чтобы эта строка включалась всякий раз, когда пермалинки обновляются.
В wp-включает/класс-wp-перезаписывает. 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. Это было быстрое и грязное исправление.