У меня возникли проблемы с правилом mod_rewrite, не соответствующим, когда я думаю, что это нужно.mod_rewrite правило регулярных выражений с закодированными новыми строками (% 0A)
правило заключается в следующем:
RewriteRule ^api/(.*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]
И пример Ссылка:
http://ourdomain.tld/api/aaaaa/bbbb/cccc%0Adddd.json
Это правило работает хорошо до тех пор, пока вы не $0A
в URL (насколько Я могу сказать).
Я понимаю, что .
означает что-либо, кроме новой строки, и пробовал правила, подобные следующим, чтобы обойти либо новые строки, либо процентные символы, поскольку я не совсем уверен, как он отформатирован в то время, когда mod_rewrite видит его, но никто не работал:
RewriteRule ^api/([.\s]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]
RewriteRule ^api/([.\%]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]
RewriteRule ^api/([.%]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]
Как ни странно, даже в следующем не будет работать на всех URLs, даже те, без %
символов:
RewriteRule ^api/([.]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]
Я был бы очень признателен, если кто-то может пролить некоторый свет на это для меня как я могу на самом деле не изменяйте, как работает API (IE я не могу кодировать base64 и т. д.), и вам нужно получить значение с новой строкой в нем.
Я тестировал его на http://htaccess.madewithlove.be/, и их инструмент считает, что он должен работать!
EDIT:
У нас было решение для URL выше, но он не работает с примером, как:
/api/something/sent+40.06K+bytes++received+7.83M+bytes++542.70K+bytes%2Fsec%0Atotal+size+is+19.83G++speedup+is+2520.16+%28Completed+in+14+seconds%29.json
Спасибо.
mod_rewrite является сомнительным с символами новой строкой (и другими закодированными специальными символами, такими как косые черты). Способом их сопоставления будет использование escape-последовательности '\ x':' \ x0A' является шестнадцатеричным представлением новой строки. Обычно видная конструкция - '[\ x00- \ xff]', буквально «любой байт», вы можете попробовать работать с ней, например, «RewriteRule api/([\ x00- \ xff]) *? \. (Json | xml | csv | txt | printr | basictxt) $ 'Обратите внимание на ленивую звезду. Я не могу проверить это сейчас, но, возможно, стоит попробовать. –
@ SáT, спасибо. Я пробовал это, но больше не повезло! Должен быть способ заставить это работать. –