.htaccess AH00124:由于可能的配置错误,请求超出了10个内部重定向的限制

.htaccess AH00124:由于可能的配置错误,请求超出了10个内部重定向的限制,.htaccess,redirect,apache2,.htaccess,Redirect,Apache2,当有人访问我的站点上的商店页面时,我一直在apache日志中看到这个错误,我尝试删除我的htaccess并使用.php?s=$var,但我仍然收到相同的错误,因此我认为这与apache配置文件有关,而与htaccess文件无关,不管怎样 htaccess: RewriteEngine on RewriteCond %{HTTPS} !on [OR] RewriteCond %{HTTP_HOST} !^www\. RewriteRule (.*) https://www.example.com%

当有人访问我的站点上的商店页面时,我一直在apache日志中看到这个错误,我尝试删除我的htaccess并使用.php?s=$var,但我仍然收到相同的错误,因此我认为这与apache配置文件有关,而与htaccess文件无关,不管怎样

htaccess:

RewriteEngine on
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]

RewriteCond %{THE_REQUEST} //
RewriteRule ^(.*)$ /$1 [L,R=301]

RewriteRule ^home/?$ home.php  [NC]

RewriteCond %{THE_REQUEST} /shop\?c=([^&\s]+)&s=([^&\s]+)&s2=([^&\s]+)&b=([^&\s]+) [NC]
RewriteRule ^ shop/%1/%2/%3/%4? [L,R=302,NE]

RewriteRule ^shop/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ shop.php?c=$1&s=$2&s2=$3&b=$4 [L,QSA,B]
RewriteRule ^shop/([^/]+)/([^/]+)/([^/]+)/?$ shop.php?c=$1&s=$2&s2=$3 [L,QSA,B]
RewriteRule ^shop/([^/]+)/([^/]+)/?$ shop.php?c=$1&s=$2 [L,QSA,B]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L]
SSL apache配置:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/www/example.com">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

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

服务器管理员admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot/var/www/example.com/public\u html
ErrorLog${APACHE_LOG_DIR}/error.LOG
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
Include/etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile/etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile/etc/letsencrypt/live/example.com/privkey.pem
HTTP apache配置文件:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/www/example.com">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

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

服务器管理员admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot/var/www/example.com/public\u html
ErrorLog${APACHE_LOG_DIR}/error.LOG
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
AuthType Basic
AuthName“受限内容”
AuthUserFile/etc/apache2/.htpasswd
需要有效用户
重新启动发动机
RewriteCond%{SERVER_NAME}=example.com[或]
RewriteCond%{SERVER_NAME}=www.example.com
重写规则^https://www.example.com%{REQUEST_URI}[END,NE,R=permanent]

您发布的服务器配置文件中没有任何内容会导致重写循环-您的服务器配置中没有重写内容

我尝试过删除htaccess并使用
.php?s=$var
,但仍然出现相同的错误

这令人费解。子目录中是否有其他
.htaccess
文件?如果没有任何
.htaccess
文件,并且使用您发布的服务器配置,似乎不可能获得重写循环-因为您根本没有重写

但是,在某些情况下,添加
.php
扩展名的最后一个规则块可能会导致重写循环。这需要纠正。您目前有:

问题是,检查
.php
是否存在的第二个条件不一定执行以下
重写规则
将重写到的相同文件检查。例如,存在
/foo.php
的请求
/foo/bar
,将导致重写循环

要解决此问题,您需要将第2个条件改为以下内容:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
请参阅以下详细说明此问题的ServerFault问题:

因此,完整的规则变成:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ $1.php [L]
您还应该确保禁用多视图(如果尚未禁用),因为您的URL直接映射到文件扩展名小于
.php
的文件(否则mod_协商将在mod_重写之前重写URL,并且您将丢失URL参数)。在
.htaccess
文件的顶部,包括:

Options -MultiViews

触发重写循环的请求URL是什么?您应该在服务器配置中启用mod_rewrite调试(例如
LogLevel rewrite:trace3
或类似),以从重写循环中获取回溯-这将为实际发生的情况提供一个重要线索。