RewriteRule ^([^/]+)/?$ /index.php?p1=$1 [L]
Причина, по которой это не работает, заключается в том, что существует внутренний цикл перенаправления, скажем, вы получаете запрос /zoo
:
zoo
(без косой черты здесь) соответствует ^([^/]+)/?$
, а URL переписывается на /index.php?p1=zoo
zoo
и /index.php
различаются, поэтому он перенаправляется изнутри, и правила применяются снова, начальный слеш удаляется
index.php
соответствует ^([^/]+)/?$
, переписывается в /index.php?p1=index.php
index.php
и /index.php
различны, поэтому внутреннее перенаправление снова
- повторить 3 и 4
Один из способов остановить цикл - изменить правило на:
RewriteRule ^([^/]+)/?$ index.php?p1=$1 [L]
Так что index.php
будет соответствовать index.php
(без косой черты), но лучшим способом было бы добавить некоторые условия перезаписи:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Перед правилом перезаписи.