RewriteCond не учитывается в стандартном WordPress htaccess - PullRequest
1 голос
/ 13 июля 2020

Доброе утро,

У меня очень странная проблема с .htaccess по умолчанию в WordPress.

У меня есть папка «stats» в сети root, которая содержит что-то еще, кроме WordPress. Обычно я могу получить к нему доступ, выполнив www.example.com/stats/ в веб-браузере. Но с одним WordPress www.example.com/stats/ перезаписывается в index. php WordPress.

Обратите внимание, что я использую по умолчанию WordPress .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>

Обычно RewriteCond %{REQUEST_FILENAME} !-d помогает пропустить перезапись, поскольку stats - это каталог. Но stats по-прежнему переписывается в index.php.

Я уже пытался добавить другой RewriteCondREQUEST_FILENAME и QUERY_STRING), чтобы попробовать пропустить вручную stats каталог, но это не работает. Вот они (в соответствии с запросом в комментариях):

RewriteCond %{REQUEST_FILENAME} !^stats$
RewriteCond %{REQUEST_FILENAME} !^stats/$
RewriteCond %{REQUEST_FILENAME} !^/stats/$
RewriteCond %{QUERY_STRING} !stats
RewriteCond %{QUERY_STRING} !^stats/$
RewriteCond %{QUERY_STRING} !^/stats/$
RewriteCond %{QUERY_STRING} !stats(.*)

Оба не работают.

Как и было запрошено в комментарии, я попытался переименовать stats на другое имя. И работает с именем stats2. Но я все равно хочу использовать stats в качестве имени папки.

Обратите внимание, что это не проблема кеширования.

Внутри папки stats есть .htaccess:

AuthType Basic
AuthName "Members Only"
AuthUserFile /var/www/clients/client0/web1/web/stats/.htpasswd_stats
require valid-user

Обратите внимание, что папка stats управляется ISPConfig.

Есть идеи проверить? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Обнаружена проблема !!!

В общем, Apache выполняет фазу перезаписи перед фазой авторизации, поэтому ваш код выполняет перезапись, даже не запрашивая аутентификацию пользователя. { ссылка }

Мне пришлось добавить его в .htaccess на веб-сайте root:

RewriteCond %{LA-U:REMOTE_USER} !^$

Итак, мой последний .htaccess это :

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

Спасибо, что добавили людей в раздел комментариев, которые помогли мне решить эту проблему.

0 голосов
/ 13 июля 2020

Вместо изменения файла root .htaccess может быть предпочтительнее просто отключить механизм перезаписи в файле /stats/.htaccess. Поскольку mod_rewrite не наследуется (по умолчанию), это должно предотвратить обработку фронт-контроллера WordPress в файле root .htaccess.

Например, в /stats/.htaccess:

RewriteEngine Off

AuthType Basic
: etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...