Centos

如果 allowoverride 設置為 all,則伺服器狀態不起作用

  • September 17, 2014

在我的 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選項更改為 all 它不會。如果allowoverride選項設置為All,我如何讓伺服器狀態正常工作

我已經關注了這個但仍然沒有運氣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

首先,我對您在 location 塊中使用以下內容感到困惑,我覺得您可能想拒絕所有人,但可能允許您自己的 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 處理所有內容並允許 SEO url 等等。

我們添加的行:

RewriteCond %{REQUEST_URI} !=/server-status

告訴 apache 執行我們上面所說的操作(根據 RewriteRule 將所有內容重寫到 index.php),除非 URI 是 /server-status - 因為這將不再被重寫並發送到 wordpress index.php,處理程序應該能夠按預期行事。

其他兩個條件

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

據您所知,如果請求是實際文件或實際文件夾,請告訴 apache 不要重寫 url。

您可以在官方文件中閱讀有關 Mod_Rewrite 的更多資訊。

引用自:https://serverfault.com/questions/379184