Проблемы с переписыванием мода, косой чертой и $_GET

Я пытаюсь реализовать более удобные URL-адреса, используя мод, переписывающий скрипт php, который я написал для просмотра документов, извлеченных из базы данных mysql, по их имени записи. я использую следующий код, и он отлично работает.

RewriteRule ^view.doc.(.+)  index.php?doc=$1

так что в основном

view.doc.xyz whould be index.php?doc=xyz

Но у меня проблемы с именами записей, в которых '/' и '\' просматриваются по переписанной ссылке.

view.doc.abc/123 into index.php?doc=abc/123

или нравится

view.doc.sg1\123 в index.php?doc=sg1\123

Я бы получил бесконечный цикл или ошибку 404. Я новичок в переписывании модов и буду очень признателен за любую помощь в этом вопросе.


person user3010407    schedule 19.11.2013    source источник


Ответы (2)


Попробуйте это правило:

RewriteRule ^view\.doc\.(.+)$ index.php?doc=$1 [L,QSA,NE,NC]
person anubhava    schedule 19.11.2013
comment
да, но кажется, что проблема 404 сохранялась только потому, что скрипт работал из подкаталога. Я просто добавил html-тег ‹base› в заголовок документа, и ваше решение по перезаписи сработало достаточно хорошо. - person user3010407; 19.12.2013

Я предлагаю решение, несколько отличающееся от решения @anubhava, добавляя косую черту перед index.php, проверенное на Debian/Apache2:

RewriteEngine On
RewriteRule ^view\.doc\.(.+)$ /index.php?doc=$1 [L,QSA,NE,NC]

Это дает:

view.doc.abc/123 => /index.php?doc=abc/123

Я не могу протестировать анти-слеш \, так как ни один браузер не позволяет мне проверить это в URL-адресе, не преобразовав его в косую черту /.

person jacouh    schedule 19.11.2013