Внутренняя ошибка, когда файл не существует - PullRequest
0 голосов
/ 25 сентября 2010

Я хочу получить все до "/" и объединить с ".php"

работает нормально, но когда файл не существует, я получаю внутреннюю ошибку

RewriteRule ([^\/]*) $1.php

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

Возможно, вы захотите проверить, что то, что вы переписываете, существует перед выполнением перезаписи, чтобы избежать цикла (отметив, что ваш тестовый шаблон соответствует тому, что вы переписываете).Один из возможных подходов к этому заключается в следующем:

# 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 для получения более подробной информации о том, что это была за ошибка, хотя в этом случае я подозреваю, что это сообщение о превышении лимита внутреннего перенаправления.

1 голос
/ 25 сентября 2010

Возможно, обработка случаев несуществующего файла и / или каталога может помочь

RewriteCond %{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} -f

Попробуйте обработать эти случаи, чтобы избежать ошибок

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