AH00124: Запрос превысил предел 10 внутренних перенаправлений из-за вероятной ошибки конфигурации - PullRequest
0 голосов
/ 19 января 2020

Я вижу эту ошибку в своем журнале 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 conf:

<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>

HTTP apache conf:

<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>

1 Ответ

0 голосов
/ 21 января 2020

В опубликованных вами конфигурационных файлах сервера нет ничего, что могло бы привести к перезаписи l oop - в конфигурации вашего сервера нет перезаписей.

I Я попытался удалить мой htaccess и использовать .php?s=$var, и я все еще получаю ту же ошибку

Это озадачивает. Есть ли у вас другие .htaccess файлы в подкаталогах? Без каких-либо файлов .htaccess и с конфигурацией сервера, которую вы опубликовали, было бы невозможно получить перезапись l oop - поскольку у вас не было бы перезаписей вообще!

Однако ваше последнее правило блок, который добавляет расширение .php, может привести к перезаписи l oop при определенных условиях. Это должно быть исправлено. В настоящее время у вас есть:

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

Проблема заключается в том, что 2-е условие, проверяющее наличие <filename>.php, не обязательно выполняет ту же проверку файла, что и следующая RewriteRule переписал бы на. например. Запрос /foo/bar, где существует /foo.php, приведет к перезаписи l oop.

Чтобы решить эту проблему, вам нужно будет вместо этого заменить второе условие на что-то вроде следующего:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f

См. мой ответ на следующий вопрос ServerFault, который объясняет это более подробно:

Итак, полное правило становится таким:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ $1.php [L]

Вы также должны убедиться, что MultiViews отключен (если не уже), так как ваши URL-адреса отображаются непосредственно на файлы с расширением .php (в противном случае) mod_negotiation перезапишет URL - до mod_rewrite - и вы потеряете параметры URL). В верхней части вашего .htaccess файла:

Options -MultiViews
...