Необязательные проблемы с завершающей косой чертой RewriteRule

Работаю над приложением, которое я создаю параллельно с сайтом WordPress с включенными постоянными ссылками. Итак, позже в htaccess есть и другие перезаписи, которые обрабатывают все аспекты для WordPress. Но я пытаюсь выполнить некоторые из своих собственных переписываний, прежде чем до них дойдет. - и, конечно же, используя [L] после моего. Все работает идеально, пока я не попытаюсь добавить в конец опцию, разрешающую косую черту или не косую черту (и все же найти совпадение).

Вот пример того, что выдает ошибку 500 на этом сервере:

RewriteRule ^app/([^/]+)/?$ /app/$1\.php [L,QSA]

http://<domain>.com/app/login
or
http://<domain>.com/app/login/

Но следующее работает просто отлично и выше предыдущего примера в файле htaccess.

RewriteRule ^app/p/([^/]+)/?$ /app/page.php?page_slug=$1 [L,QSA]

http://<domain>.com/app/p/styles
or
http://<domain>.com/app/p/styles/

Я пробовал варианты с небольшим / без успеха.

RewriteRule ^app/([^/]+)/{0,1}$ /app/$1\.php [L,QSA]
and
RewriteRule ^app/([^/]+)[p]/[\p]?$ /app/$1\.php [L,QSA]

person tdurham    schedule 20.01.2011    source источник


Ответы (1)


Это связано с тем, что ваше целевое местоположение /app/$1.php полностью соответствует исходному местоположению ^app/([^/]+)/?$. Таким образом, страница перенаправляется на себя.

RewriteCond %{REQUEST_URI} !\.php
RewriteRule ^app/([^/]+)/?$ /app/$1.php [L,QSA]
person akond    schedule 20.01.2011
comment
понятно! Таким образом, в этом случае требуется косая черта в конце, чтобы источник отличался от цели. И, казалось бы, единственный способ обойти это - выбрать другое имя источника... поскольку цель не может измениться. - person tdurham; 20.01.2011
comment
Просто добавьте RewriteCond, как в моем примере, перед вашим правилом. - person akond; 20.01.2011