Как сделать принудительную переадресацию, когда url содержит вопросительный знак в htaccess?

У меня есть URL :

www.example.com/PageName:ArgumentValue1,ArgumentValue2

Я хотел бы сделать перенаправление на

www.example.com/apex/f?p=alias:PageName:ArgumentValue1,ArgumentValue2

Я уже сделал..:

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule (.*)$ ./apex/f?p=alias:$1 [L]

Перенаправление работает правильно, за исключением случаев, когда Argumentvalue имеет знак вопроса.

Есть ли способ принудительного перенаправления, даже если в аргументе есть знак вопроса?

PageName, ArgumentValue1 и ArgumentValue2 являются динамическими переменными.

1
задан 14 October 2019 в 00:47
1 ответ

www.example.com/PageName:ArgumentValue1,ArgumentValue2

Поскольку ArgumentValue являются частью URL-пути, то любой литерал ? (вопросительный знак) в запросе должен быть закодирован как % 3F . В противном случае некодированный ? указывает на начало строки запроса и фактически разделяет URL-адрес на два - что и происходит здесь.

В качестве обходного пути вы можете сделать следующее. следующее вместо этого:

RewriteCond %{THE_REQUEST} "^GET /([^\s]+)"
RewriteRule ^[^:]+: apex/f?p=alias:%1 [L]
0
ответ дан 4 December 2019 в 02:39

Теги

Похожие вопросы