Назад | Перейти на главную страницу

server-status не работает, если для allowoverride установлено все

в моей конфигурации apache у меня есть следующие настройки

<Directory "/opt/website/new-website-old/httpdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Location /server-status>
    #AllowOverride None
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from all
</Location>

Используя это Статус сервера работает, но если я изменю allowoverride вариант для всего этого не делает. Как я могу заставить работать статус сервера, если allowoverride опция установлена ​​на Все

Я следил за этим, но все равно не повезло статус сервера wordpress

В моем текущем файле доступа ht у меня есть

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} ^www.asb.com.au$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/about/the-group/domain-asb$1 [R=301,L]
</IfModule>

# 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

Во-первых, меня смущает использование вами следующего в блоке местоположения: я чувствую, что вы, вероятно, захотите запретить всем, но разрешить, возможно, свой собственный IP-адрес, но я отвлекся.

Deny from all
Allow from all

Самая важная вещь, которую вы пропустили в опубликованном вами руководстве, - это следующая строка:

RewriteCond %{REQUEST_URI} !=/server-status

В результате файл .htaccess будет выглядеть примерно так:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !=/server-status
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Вдобавок к этому, у вас, похоже, есть два отдельных блока перезаписи в вашем .htaccess, которые почти идентичны, я бы объединил их в один, чтобы окончательное содержимое .htaccess было (и ничего больше):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !=/server-status
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} ^www.asb.com.au$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/about/the-group/domain-asb$1 [R=301,L]
</IfModule>

Еще немного информации для вас: для AllowOverride, установленного на none, apache полностью игнорирует файл .htaccess, поэтому, когда он установлен на all, ясно, что это говорит вам, что что-то в .htaccess отменяет возможность для / server-status на обрабатываться обработчиком статуса сервера. В вашем файле .htaccess оскорбительная строка в основном:

RewriteRule . /index.php [L]

Это говорит apache переписать все и отправить в index.php, потому что wordpress обрабатывает все через index.php и, среди прочего, позволяет использовать URL-адреса SEO.

Строка, которую мы добавили:

RewriteCond %{REQUEST_URI} !=/server-status

Указывает apache сделать то, что мы заявили выше (переписать все в index.php на основе RewriteRule), если URI не равен / server-status - поскольку он больше не будет переписываться и отправляться в wordpress index.php, обработчик должен иметь возможность вести себя так, как ожидалось.

Два других условия

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Насколько вам известно, скажите apache не перезаписывать URL-адрес, если запрос является фактическим файлом или реальной папкой.

Вы можете узнать больше о Mod_Rewrite в официальная документация.

Самый простой способ заставить страницу статуса сервера работать с правилами перезаписи Wordpress - это просто создать папку или файл в папке Wordpress с именем server-status

Это работает, потому что (как указывает WerkkreW) правила:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

означают, что перезапись не должна производиться, если есть файл или каталог с таким же именем.