簡體   English   中英

訪問 web.htaccess 時出錯 AH01797:客戶端被服務器配置拒絕

[英]error accessing web htaccess AH01797: client denied by server configuration

當我打開我的網站外部時出現錯誤。 我收到此錯誤:內部服務器錯誤服務器遇到內部錯誤或配置錯誤,無法完成您的請求。

如果我刪除我的 .htaccess,它不會給我錯誤,但會顯示 /htdocs 的路徑,並且我已經配置了一個子文件夾。

如果我打開 localhost:80,它會正確重定向到子文件夾 htdocs/folder-name 問題是當我通過www.domain.com外部打開它時。

這是我的.htaccess。路徑:C:\Apache24\htdocs.htaccess 內容:

#DON'T SHOW DIRECTORY LISTINGS
 Options -Indexes

#FOLLOW SYMBOLIC LINKS
 Options +FollowSymLinks

#SET DEFAULT HANDLER
 DirectoryIndex index.html index.php

 RewriteEngine on
RewriteCond %{HTTP_HOST} ^DOMAIN.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.DOMAIN.com$
RewriteCond %{REQUEST_URI} !FOLDER/
RewriteRule (.*) /FOLDER/$1 [L]


#ERROR 404 PAGE
 ErrorDocument 404 /404.html
                  

APACHE 日志:

client denied by server configuration: C:/Apache24/htdocs/WEBSITE-XX/
[AH01797: client denied by server configuration: C:/Apache24/error/HTTP_FORBIDDEN.html.var
 AH01797: client denied by server configuration: C:/Apache24/htdocs/WEBSITE-XX/favicon.ico, referer: https://www.example.com/
 AH01797: client denied by server configuration: C:/Apache24/error/HTTP_FORBIDDEN.html.var, referer: https://www.example.com/

** 重寫模塊處於活動狀態且路徑正確 **

VirtualHost的httpd.conf代碼

編輯

<VirtualHost *:80>

    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot C:\Apache24\htdocs\example
    ErrorLog C:\Apache24\logs\error.log
    CustomLog C:\Apache24\logs\access.log combined

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =example.com [OR]
    RewriteCond %{SERVER_NAME} =www.example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

<VirtualHost *:443>

    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot C:\Apache24\htdocs\example
    ErrorLog C:\Apache24\logs\error.log
    CustomLog C:\Apache24\logs\access.log combined

    SSLEngine on
    SSLCertificateFile C:\Apache24\conf\certificate.crt
    SSLCertificateKeyFile C:\Apache24\conf\private.key

</VirtualHost>

**** 使用新的 HTTPD.CONF 進行編輯 ****

<VirtualHost *:80>

    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot C:\Apache24\htdocs\example
    ErrorLog C:\Apache24\logs\error.log
    CustomLog C:\Apache24\logs\access.log combined
<Directory C:\Apache24\htdocs\example>
    # Requried for mod_rewrite (and disable Indexes / MultiViews)
    Options FollowSymLinks

    # Allow access
    Require all granted

    # Enabled .htaccess overrides
    AllowOverride All
</Directory>
    Redirect 301 / https://example.com/
    # RewriteEngine on
    # RewriteCond %{SERVER_NAME} =example.com [OR]
    # RewriteCond %{SERVER_NAME} =www.example.com
    # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

<VirtualHost *:443>

    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot C:\Apache24\htdocs\example
    ErrorLog C:\Apache24\logs\error.log
    CustomLog C:\Apache24\logs\access.log combined
    
<Directory C:\Apache24\htdocs\example>
    # Requried for mod_rewrite (and disable Indexes / MultiViews)
    Options FollowSymLinks

    # Allow access
    Require all granted

    # Enabled .htaccess overrides
    AllowOverride All
</Directory>

    SSLEngine on
    SSLCertificateFile C:\Apache24\conf\certificate.crt
    SSLCertificateKeyFile C:\Apache24\conf\private.key

</VirtualHost>
````
<VirtualHost *:80>: DocumentRoot C:\Apache24\htdocs\example: <VirtualHost *:443>: DocumentRoot C:\Apache24\htdocs\Mymxtools

令人困惑的是,您為兩個 VirtualHosts 定義了不同的DocumentRoot (也許這是您的示例中的錯誤?)盡管您將所有內容重定向到 HTTPS,所以這並不重要,因為它發生了。

但是,您沒有“允許”訪問文件系統的這一部分或啟用.htaccess覆蓋。

您需要在<VirtualHost *:443>容器中使用類似以下內容來授予訪問權限並啟用.htaccess覆蓋。

<Directory C:\Apache24\htdocs\Mymxtools>
    # Requried for mod_rewrite (and disable Indexes / MultiViews)
    Options FollowSymLinks

    # Allow access
    Require all granted

    # Enabled .htaccess overrides
    AllowOverride All
</Directory>

在旁邊:

 RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

要在<VirtualHost *:80>容器中將所有內容從 HTTP 重定向到 HTTPS,您不需要這個“復雜”的 mod_rewrite 規則。 一個更簡單的 mod_alias Redirect就足夠了(也是首選)。

例如,請改用以下內容:

Redirect 301 / https://example.com/

您應該在此階段規范化主機名。 您之前的 mod_rewrite 規則將保留主機名,即。 www 或非 www。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM