Возможно, вы захотите проверить, что то, что вы переписываете, существует перед выполнением перезаписи, чтобы избежать цикла (отметив, что ваш тестовый шаблон соответствует тому, что вы переписываете).Один из возможных подходов к этому заключается в следующем:
# Check that the file isn't a directory
RewriteCond %{REQUEST_FILENAME} !-d
# ...nor is it a file
RewriteCond %{REQUEST_FILENAME} !-f
# ...but the result of the rewrite will be
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/]+) $1.php
Это также имеет (незначительное) преимущество в отображении исходного URL в случаях, когда генерируется 404, при условии, что вы используете стандартную ошибку Apacheсообщение.Если бы вы переписали несуществующий файл PHP, сервер сказал бы, что / что-то. Php не может быть найдено, вместо / что-то / , но поскольку перезаписьне выполняется, если целевой файл не существует, вместо этого вы получаете / что-то / .
Если вы все еще получаете ошибку 500, вероятно, в вашем файле .htaccess есть другое конфликтующее правило.Вам также следует проверить журнал ошибок Apache для получения более подробной информации о том, что это была за ошибка, хотя в этом случае я подозреваю, что это сообщение о превышении лимита внутреннего перенаправления.