Я использовал следующий код для сопоставления https://live.example.com с http://example.com/api
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTPS} =on RewriteCond %{HTTP_HOST} ^live\.example\.com [NC] RewriteRule (.+)$ "http://example.com/api/$1" [L,P]
следующий URL:
https://live.example.com/userlinks/xml/John%20James/MvPjeUTo15/
Предполагается отобразить на:
http://example.com/api/userlinks/xml/John%20James/MvPjeUTo15/
Вместо этого он сопоставляет его с:
http://example.com/api/userlinks/xml/John
Так что, кажется, сократить его в пространстве. Я использую платформу Codeigniter, но не уверен, что проблема в этом.
Также использование %20 или просто пробел в строке URL не дает никаких других результатов.
%20
У кого-нибудь есть идеи и / или решения, почему это происходит?
Большое спасибо,
Ice
Я исправил:
Добавлено в apache2.conf (httpd.conf):
RewriteMap escapemap int:escape
.htaccess:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTPS} =on RewriteCond "%{HTTP_HOST}" "^live\.domain\.com" [NC] RewriteRule "(.*)$" "http://domain.com/api/${escapemap:$1}" [L,P]
источник: http://www.nabble.com/Re%3A-Re-users%40httpd--writeRule%2C--P--and-space-on-URL-p15632475.html
Что сработало у меня без изменения файла httpd:
RewriteRule ^(.+) http://domain.com/api/$1 [R=302,NC]
Обратите внимание, что правило не захватывает конец строки.