Переписывание URL со строкой запроса

В продолжение к тому, что я спросил здесь, я хочу автоматическое переписывание ниже URL

http://testsite.com/siterootb/sample-page.php?bbi=value1&bbl=value2

в

http://testsite.com/siterootb/sample-page/value1/value2

мой htaccess теперь выглядит

RewriteEngine on

RewriteCond %{QUERY_STRING} !^$
RewriteRule ^(.*) http://localhost%{REQUEST_URI}%1? [R=301,L]

###########################################################################
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/siterootb/([^/]+)/([^/]+)/([^/]+)
RewriteCond %{DOCUMENT_ROOT}/siterootb/%1.php -f
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+) $1.php?bbi=$2&bbl=$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

Я прошел URL перезаписи - Query String, URL переписать строку запроса, WordPress, как удалить? из URL, используя htaccess и многое другое, что я получил от [query-string] [.htaccess]

1 ответ

Решение

Добавьте эти правила:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /siterootb/([^.]+)\.php\?bbi=([^&\ ]+)&bbl=([^&\ ]+)
RewriteRule ^ /siterootb/%1/%2/%3? [L,R=301]

Причина, по которой вы должны соответствовать %{THE_REQUEST} переменная, потому что вы хотите буквально сопоставить то, что запрашивается, а не URI. URI изменяется по мере применения правил, поэтому вы будете сопоставлять изменения, внесенные другим правилом, если вы сопоставляете их с %{REQUEST_URI} переменная.

Другие вопросы по тегам