У меня есть PHP-скрипт, используемый для обработки изображений перед их отображением на веб-странице. Строку запроса нужно проверить, чтобы отклонить все запросы, поступающие из внешних доменов. Если ДВА example.com
Фильтрация QUERY_STRING с обратными ссылками в RewriteCond
http://example.com/process.php?img=somepath/images/imgX.png OK
http://example.com/process.php?img=http://example.com/anotherpath/folder/images/imgX.png OK
http://example.com/process.php?img=http://anotherdomain.com/images/someimg.jpg Rejected!
Это переписывает правила работы на моем тестовом сервере:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http://
RewriteCond expr "! %{QUERY_STRING} -strmatch '*%{HTTP_HOST}*'"
RewriteRule .* - [F]
</IfModule>
Но на сервере это не работает. После некоторых головных болей и поиска я обнаружил, что expr не поддерживается до Apache 2.4 ...
Из того, что я прочитал, я могу использовать атомные обратные ссылки, чтобы проверить, присутствует ли% {HTTP_HOST} в% {QUERY_STRING}. Идея состоит в том, чтобы построить что-то вроде этого
RewriteCond %{HTTP_HOST}::%{QUERY_STRING} ^(.*?)::/\1/?
Который явно не работает в текущем состоянии. Любая помощь и дальнейшее объяснение этого синтаксиса будут с благодарностью оценены.
Как 'RewriteCond% {QUERY_STRING} [a-zA-Z0-9_] = http: //' allow '? Img = somepath/images/imgX.png' строка запроса? – anubhava
В этом суть, это не позволяет. Поскольку условие не выполняется, остальные игнорируются, RewriteRule Forbidden не применяется и запрос обрабатывается нормально. – JeffT