.htaccess RewriteRule для нескольких параметров, добавленных в javascript как не слеш - PullRequest
0 голосов
/ 30 сентября 2019

Этот вопрос может быть повторен. Но я не нашел решения своей проблемы. Я пытаюсь добавить RewriteRule в файл htaccess, который будет сочетать косые статические параметры с неразрезанными параметрами, добавленными в javascript window.history.replaceState( {} , '', ''); для выбранных фильтров. Я получил два статических параметра, названных «р» и «а». Для этого я пишу правило:

RewriteRule ^/?([0-9a-zA-Z\_\-]*)/([0-9a-zA-Z\_\-]*)$ index.php?p=$1&a=$2 [NC,L].

Но мне нужно добавить неперерезанные параметры для дружественного URL, который будет создан только в js и использован для обратного действия в истории. Я хотел бы, чтобы этот URL-адрес выглядел следующим образом:

www.page.com / category / pen.html? Color = green

и это должно быть как-то не дружелюбно:

www.page.com/index.php? P = category & a = pen & color = green

и что параметров после параметра 'a' может быть много, но их следуетпосле расширения .html.

Я пока не нашел решения этой проблемы. Спасибо за любую помощь.

РЕДАКТИРОВАТЬ

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?example.com [NC]
RewriteRule ^admin/?$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9\-]+)(/([A-Za-z0-9\-\,]+))?$ /index.php?p=$1&a=$3 [L,NC,QSA]

Это работает!

1 Ответ

1 голос
/ 07 октября 2019

Вы можете использовать флаг QSA в своем правиле, чтобы получить любую уже существующую строку запроса исходного правила, объединенную с тем, который вы создаете сами.

https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_qsa:

Когда заменяющий URI содержит строку запроса, RewriteRule по умолчанию ведет к удалению существующей строки запроса и замене ее новой сгенерированной. Использование флага [QSA] приводит к объединению строк запроса.

...