Использование .htaccess Я хочу превратить% {PATH_INFO} в параметр строки запроса для начальной загрузки. Но я хочу, чтобы посетители не могли вручную ввести параметр начальной загрузки.Удалить определенный параметр строки запроса, ЕСЛИ он не был добавлен rewrite
Так что введен URL: www.example.com/user/pictures?id=65
На самом деле показывает: www.example.com?bootstrap=/user/pictures & ID = 65
НО, если ввести вручную
Это введенные URL: www.example.com?bootstrap=/user/pictures & я d = 65
Удаляет его: www.example.com?id=65
Или выводит сообщение об ошибке: 404: не найден
Лучший сценарий
вручную введенный bootstrap игнорируется, а% {PATH_INFO} становится новым параметром.
Так что это: www.example.com/user/pictures?id=65 & самозагрузки = somecrap
Дисплеи: www.example.com?id=65 & самозагрузки =/пользователь/фотографии
Существует две причины блокировки введенного вручную параметра начальной загрузки. 1) Безопасность. Мы не хотели бы, чтобы пользователи охотились и клевали файлы, не предназначенные для отображения. 2) Конфликты. Мы не хотим выбирать между введенным вручную бутстрапом и правильным% {PATH_INFO}.
Удаление параметра начальной загрузки легко. Что-то вроде ...
RewriteCond %{QUERY_STRING} ^(.*&)?bootstrap=[^&]*(?:&(.*))?$ [NC]
RewriteRule^%{REQUEST_URI}?%1%2 [L,NE]
Добавление параметра очень просто. (Mine является более сложным, но это показывает идею.)
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI}%{PATH_INFO} (.*?)(/.+)\2$
RewriteRule ^(.*)$ /%1?bootstrap=%2 [QSA,L]
Если Htaccess просто пробежал один раз, эти два сниппеты будет делать трюк. Но вместо этого htaccess перезапускается после каждого переписывания, и мой добавленный параметр начальной загрузки снова удаляется.
Я знаю, что быстрое решение n-dirty должно было бы добавить [END] ко второму правилу, но это не будет работать здесь.
Что мне нужно - это удалить? "Bootstrap = xxx" ТОЛЬКО от исходного запроса и НЕ от перезаписанного запроса.
Благодаря
Очень хорошее использование 'REDIRECT_QUERY_STRING' ++ – anubhava