Ошибка 500, скорее всего, является результатом внутренней перезаписи l oop, поскольку условие, которое проверяет, что расширение запроса + .php
(ie. %{REQUEST_FILENAME}\.php
) отображается в файле, не обязательно совпадает с URL-путь, по которому вы переписываете (ie. /$1.php?id=$2
). См. мой ответ на следующий вопрос ServerFault, в котором это подробно обсуждается: https://serverfault.com/questions/989333/using-apache-rewrite-rules-in-htaccess-to-remove-html-causing-a-500-error
Вместо этого попробуйте следующее:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/.]+)/?(\d+)?$ $1.php?id=$2 [L]
Это обрабатывает оба сценария ios:
/dashboard
внутренне переписан в /dashboard.php?id=
/dashboard/20
внутренне переписан в /dashboard.php?id=20
Сделав шаблон RewriteRule
более ограничительным, проверка, проверяющая, отображается ли запрос на файл, кажется излишней, поскольку шаблон вряд ли будет соответствовать реальному файлу. , Кроме того, любой настоящий файл + .php
в любом случае также вряд ли будет файлом - поэтому обе проверки не требуются.
Нет необходимости в обратном слэсе sh экранировать буквальную точку в RewriteCond
TestString (ie. %{DOCUMENT_ROOT}/$1.php
), поскольку это «обычная» строка, а не регулярное выражение, следовательно, точка здесь не имеет особого значения.
MultiViews необходимо отключить для эти директивы функционируют как задумано. (Возможно, это уже отключено на вашем сервере.)
В стороне:
У меня есть работающий код, который удаляет ". php "с веб-адреса только с файлом .htacess
Хотя это обычно пишется (неправильно) таким образом, это не то, что делают эти директивы. (Расширение .php
предположительно уже удалено из вашего источника HTML.) Фактически, эти директивы полностью противоположны ... они добавляют расширение файла .php
к запрошенному (без расширения) URL-адресу для внутренней перезаписи запрос обратно к базовому пути файловой системы.
(Вы можете использовать .htaccess
до удалить расширение .php
, для выгоды SEO (только). Но это требует очень Другое правило - внешний редирект.)