Вы пытаетесь сделать что-то подобное?
RewriteRule ^([^/]+)/([^/]+)/? /index.php?site=$1&category=$2 [L]
Это будет сделано, когда вы перейдете к http://domain.com/food/beef, запрос будет переписан внутренне в "/index.php?site=food&category=beef", а index.php используется для обслуживания исходного запроса. В адресной строке браузера все равно будет написано "http://domain.com/food/beef".
Если вы хотите, чтобы в строке адреса было написано http://domain.com/index.php?site=food&category=beef, добавьте «R» к «[L]». Если это наоборот, и вы хотите, чтобы, когда кто-то вводил http://domain.com/index.php?site=food&category=beef в адресной строке, и запрос внутренне переписывался в «/ food / beef» на сервере, то вам нужно проанализировать строку запроса, используя RewriteCond:
RewriteCond %{QUERY_STRING} ^site=([^&]+)&category=([^&]+)
RewriteRule ^index.php /%1/%2? [L]
То же самое относится и к "R", вызывая перенаправление браузера, как в первом примере. Если вы хотите, чтобы строка адреса изменилась на http://domain.com/food/beef, скобки должны выглядеть следующим образом: [L,R]
. Обратите внимание, что вам нужно ? в конце цели в правиле, чтобы строки запроса не добавлялись. Вот почему в вашем примере Google строка запроса добавляется.
EDIT:
Видя, что вы просто хотите изменить то, что находится в адресной строке браузера, а не там, где находится контент:
Вам нужно переписать то, что 2-е правило выше переписало BACK в index.php, но без перенаправления. Чтобы не допустить бесконечного зацикливания двух правил, поскольку одно правило переписывается на другое правило, и наоборот, вам нужно добавить флаг где-нибудь, чтобы второе правило не перенаправляло вас снова и снова.
Итак, объединяя их, вы получите:
RewriteRule ^([^/]+)/([^/]+)/? /index.php?site=$1&category=$2&redirected [L]
RewriteCond %{QUERY_STRING} !redirected
RewriteCond %{QUERY_STRING} ^site=([^&]+)&category=([^&]+)
RewriteRule ^index.php /%1/%2? [L,R=301]
Обратите внимание на параметр redirected
в строке запроса. Это вставляется, когда кто-то пытается получить доступ к чистой версии URL, например, "/ Еда / говядина". внутренне он перенаправляется в index.php, но так как правило не имеет буквы «R», строка адреса браузера не меняется.
Второе правило теперь проверяет, содержит ли запрос параметр redirected
в строке запроса. Если это не так, это означает, что кто-то ввел в адресную строку своего браузера URL index.php, поэтому перенаправьте браузер на чистую версию.