help
соответствует «help» в любом месте пути.
/help
ничего не соответствует, так как директива rewriterule
опускает косую черту в начале для сопоставления (т. Е. Вы должны использовать ^
, а не/
или ^/
, для ссылки на текущий каталог).
(Это может быть очень запутанным, если вы использовали %{REQUEST_URI}
в rewritecond
, потому что %{REQUEST_URI}
делает начинаются с завершающей косой черты. При сопоставлении с %{REQUEST_URI}
, ^
и ^/
эквивалентны, а имени каталога всегда будет предшествовать символ косой черты, независимо от того, находится он в каталоге верхнего уровня.)
Ошибка сервера вызвана бесконечным циклом.«help» становится «/help.php», что соответствует той же директиве, что и при переписывании.Итак, после первого совпадения «/help.php» становится «/help.php» бесконечно, что приводит к URL, который не может быть разрешен.
Я считаю, что такие циклы можно исправить с помощью end
флаг (т. е. [end]
), но этот флаг требует Apache 2.3.9+, тогда как Apache 2.2 кажется более распространенным в развертывании.Возможно, в любом случае было бы лучше просто исправить регулярное выражение;^help$
может показаться лучшим выбором.