500 Внутренняя ошибка сервера возвращается вместо: 404 - Не найдено - PullRequest
0 голосов
/ 17 февраля 2019

Я получаю 500 Внутренняя ошибка сервера вместо: 404 - Не найдено всякий раз, когда я набираю несуществующий адрес страницы для своего сайта.

Я думаю, это как-то связано с моими настройками .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA] 

ErrorDocument 404 /404.php

Мой .htaccess проверяет и перенаправляет все URL-адреса в https://www. форму.Он также заботится о сокрытии расширений .php со всех страниц.

Мне потребовалось много времени, чтобы придумать приведенный выше код, и теперь я действительно боюсь что-либо изменить, так как я не очень хорошо разбираюсьСинтаксис .htaccess.

Буду признателен за любую помощь или предложения!

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019
  1. Ваши 2 правила перенаправления должны быть объединены в одно, чтобы избежать множественных 301 перенаправлений (плохо для SEO и эффективности)
  2. Перед добавлением .php необходимо проверить наличие файла .phpв вашем URI.
  3. Избегайте жесткого указания имени хоста в вашем правиле.

Полный .htaccess:

ErrorDocument 404 /404.php

RewriteEngine On

## add www and turn on https in same rule
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]

# if not a directory and .php file is present then add .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
0 голосов
/ 17 февраля 2019

После этих строк буксировки:

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

Добавьте эту строку:

RewriteCond %{REQUEST_FILENAME}\.php -f

, чтобы убедиться, что запрос принимает расширение php перед отправкой на него:

RewriteRule ^(.*)$ $1.php [L,QSA] 

Когда вы отправляете несуществующие запросы какой-либо цели, убедитесь, что цель справится с этой проблемой должным образом, иначе сервер выдаст ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...