2014-10-18 6 views
0

Как переписать search/2 от index.php?search="x"&&searc_by="y"&page_no=2?Правило перезаписи и the_request

Если я не ошибаюсь %REQUEST_URI is search/2, верно? Также в этом случае %THE_REQUEST.

Страница, на которой search/2 Ссылка была переписана как раз для работы на главную страницу.

+0

- RewriteCond% {REQUEST_FILENAME}! -fRewriteCond% {REQUEST_URI} ^/Home_Page/([A-Za-z-0-9 -] +)/([0-9] +) $ -RewriteRule^([ A-Za-z-0-9 -] +)/([0-9] +) /? $ Kl.php? $ 1 & page_no = $ 2 [L, NC] –

+0

RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% { REQUEST_URI} ^/Home_Page/([A-Za-z-0-9 -] +)/([0-9] +) $ RewriteRule^([A-Za-z-0-9 -] +)/([0-9] +) /? $ Kl.php? $ 1 & page_no = $ 2 [L, NC] –

+0

Пожалуйста, используйте кнопку редактирования под своим сообщением, чтобы отредактировать эту информацию. Как вы можете видеть, это не читается в комментариях , Пожалуйста, используйте кнопки над полем редактирования, чтобы отформатировать это как код. Пожалуйста, обратите внимание на орфографию. – Sumurai8

ответ

0

%{REQUEST_URI} и %{THE_REQUEST} являются переменными в mod_rewrite. Эти переменные содержат следующее:

  • %{REQUEST_URI} будет содержать все, что находится за именем хоста и перед строкой запроса. В url http://www.example.com/its/a/scary/polarbear?truth=false, %{REQUEST_URI} будет содержать /its/a/scary/polarbear. Эта переменная обновляется после каждого переписывания.
  • %{THE_REQUEST} - это переменная, которая содержит весь запрос, как это было сделано на сервере. Это что-то в виде GET /its/a/scary/polarbear?truth=false HTTP/1.1. Поскольку запрос, который был сделан на сервер, является статичным в течение одного из таких запросов, эта переменная не изменяется при перезаписи. Поэтому это полезно в определенных ситуациях, когда вы хотите только переписать, если внешний запрос содержит что-то. Он часто используется для предотвращения бесконечных циклов.

Полный список переменных можно найти here.


В вашем случае у вас будет ссылка на search/2?search=x&search_by=y. Вы хотите внутренне переписать это на index.php?search=x&search_by=y&page_no=2. Вы можете сделать это с помощью следующего правила:

RewriteRule ^search/([0-9]+)$ /index.php?page_no=$1 [QSA,L] 

Первый аргумент соответствует внешний запрос, который приходит в Затем переписана /index.php?page_no=2.. Флаг QSA (строка запроса добавляет) присоединяет существующую строку запроса к переписанной строке запроса. В итоге вы получите /index.php?search=x&search_by=y&page_no=2. Флаг L останавливает «раунд» перезаписи. Это просто оптимизация.

+0

спасибо. Еще один вопрос, когда я делаю RewriteRule^search/([0-9] +) $, также пытается сопоставить запрос, который я добавил при создании ссылки: search/2? Search = x & search_by = y. –

+0

Все, что находится за '?', Это строка запроса. Строка запроса не сопоставляется в первом аргументе 'RewriteRule'. Поскольку я использую флаг QSA, исходная строка запроса «проваливается» и доступна в переписанном URL-адресе так же, как и в исходном URL-адресе. – Sumurai8

+0

RewriteCond% {REQUEST_URI} ^/search/ RewriteRule^([A-Za-z-0-9 -] +) /? $ kl.php? $ 1 [L, NC, QSA] Моя внутренняя ссылка:/search? ($ _ SERVER ['QUERY_STRING'] –

Смежные вопросы