mod_rewrite: запрос превысил предел 10 внутренних перенаправлений из-за вероятной ошибки конфигурации - PullRequest
0 голосов
/ 02 июня 2018

Я использую Apache 2.4 и PHP 5.6 в Linux и заметил следующую ошибку , когда пользователь посещает несуществующий файл или direcrtory (пример: /test/1.asp или / aa /) на этом сайте :

Отображение Broswer:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@xxx.edu to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Журнал ошибок Apache:

[core:error] [pid 12843] [client 202.xxx.xxx.xxx:64587] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

.htaccessфайл:

Options -MultiViews
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(en|zh|ja|ko)/(.*)$ $2?lang=$1 [L,QSA]
RewriteRule ^(.*)$ $1?lang=zh [L,QSA]
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Правило перезаписи выполняется:

http://www.example.com/en =>  http://www.example.com/index.php?lang=en 
http://www.example.com/jo =>  http://www.example.com/index.php?lang=jo
http://www.example.com/zh =>  http://www.example.com/index.php?lang=zh

По умолчанию:

http://www.example.com =>  http://www.example.com/index.php?lang=zh

Он должен возвращать ошибку 404, когда пользователь посещает несуществующий файл или direcrtory на этом сайте, а не «Внутренняя ошибка сервера».

Как это исправить?

Спасибо.

1 Ответ

0 голосов
/ 04 июня 2018

Попробуйте что-нибудь с этим

ErrorDocument 404 http://yourdomain.com/

У вас также есть 3 условия и 3 правила.Первое условие будет выполнено, когда 3 условия станут истинными.2 других будут выполнены без условий.Я не уверен, что это твое намерение.Подумайте также о циклах, каждый раз, когда флаг [L] проходит новую итерацию.

ОБНОВЛЕНИЕ

В вашем случае также вариант (упрощенный пример), перейдите оттуда

RewriteEngine On

# check if language exists do redirect
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} ^/(en|zh|ja|ko)
RewriteRule  ^(.*)$ ?lang=$1 [L,QSA]

# if not found go to your 404 page
RewriteCond %{REQUEST_URI} !^/(en|zh|ja|ko)
RewriteRule ^(.*)$ /404.html [R=404,L]

См. Также Apachemod_rewrite чтобы почувствовать и понять mod_rewrite и то, что происходит.

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