в моей конфигурации 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
означают, что перезапись не должна производиться, если есть файл или каталог с таким же именем.