|
|
|
| вот мой файл .htaccess
# отдаем все документы в utf-8
AddType "text/html; charset=utf-8" .php
AddDefaultCharset utf-8
php_value display_errors 1
php_value display_startup_errors 1
# обрабатываем ошибки
ErrorDocument 404 /index.php?run=402
ErrorDocument 403 /index.php?run=403
ErrorDocument 400 /index.php?run=404
ErrorDocument 500 /index.php?run=404
# url преобразования
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?run=$1 [L]
|
как мне сделать так чтобы GET запросы а именно $_GET[q] шли не через него!?!? | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 11:00)
| | Перед этими условиями и правилами, поставьте условие и правило, которые будут реагировать на q= в строке запроса
...
RewriteEngine On
RewriteCond %{QUERY_STRING} ^q=
RewriteRule (.*) index.php?q=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?run=$1 [L]
|
| |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 11:16)
| | хмм...
я переделал вот так
RewriteEngine On
RewriteCond %{QUERY_STRING} ^q=
RewriteRule (.*) index.php?run=certificate/ajaxname&q=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?run=$1 [L]
|
но в index.php?run=certificate/ajaxname&q=test получаю это
[run] => certificate/ajaxname
[q] => certificate/ajaxname/
|
почему $q теряется в небытие... и всегда равна $_GET['run']
что это может быть? | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 11:48)
| | Как выглядит адрес от корня который вводите и которое хотите отловить первым правилом? И что хотите, чтобы легло в $1? | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 11:53)
| | в $1 из JS скрипта отсылается инфа..
адрес - localhost/certificate/ | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 11:58)
| | Так, т.е. вы набираете просто localhost/certificate/? И certificate должно попасть в параметр q, и не должно попасть в параметр run? А какие критерии попадания в тот или иной параметр (у меня перед глазами вашей системы нет, поэтому нужно бы больше подробностей). | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 12:02)
| | попытаюсь описать....
есть JS скрипт который при событии на странице local/certificate отсылаем данные гетом на страницу
local/certificate/ajaxname но на этой странице $_GET['q'] теряется как будто не доходит.
параметр run нужен контроллеру он трогаться не должен т.к он отображает страницу.
если я убираю htaccess и ставлю скрипту отсылать данные на index.php?run=certificate/ajaxname
то все работает.
помоги ув. хеопс | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 13:01)
| | Т.е. у вас получается запрос вида
local/certificate/ajaxname?q=запрос
| преобразовать это дело надо в
index.php?run=certificate/ajaxname&q=запрос
| Тогда следует использовать следующие правила
RewriteEngine On
RewriteCond %{QUERY_STRING} ^q=(.*)
RewriteRule (.*) index.php?run=$1&q=%1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?run=$1 [L]
|
| |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 13:19)
| | отлично, работает. большое человеческое спасибо за ваш бесценный опыт.
а вот
RewriteCond %{QUERY_STRING} ^q=(.*)
RewriteRule (.*) index.php?run=$1&q=%1 [L]
|
поясните это
%1 - что это такое и откуда? | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 13:40)
| | %1 это из регулярного выражения RewriteCond. Дело в том, что RewriteRule отсекает все, что после ?, и добраться до GET-параметров можно только через парсинг строки запроса %{QUERY_STRING} в RewriteCond. Причем ссылки на скобки в RewriteRule начинаются с $, а ссылки на скобки в RewriteCond начинаются с %. | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 13:53)
| |
.........
RewriteCond %{QUERY_STRING} ^q=(.*)
RewriteRule (.*) index.php?run=$1&q=%1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?run=$1 [L]
.........
|
RewriteRule (.*) index.php?run=$1&q=%1 [L] - здесь ссылка на RewriteRule (.*) index.php?run=$1 [L]
интересно... если стоит флаг [L] у RewriteRule (.*) index.php?run=$1&q=%1 [L]
то как он ПОЛУЧАЕТ $1 если он должен прекращать поиск из за флага...
откуда строчка RewriteRule (.*) index.php?run=$1&q=%1 [L] получает $1 если оно описывается только тут RewriteRule (.*) index.php?run=$1 [L]... извините за бред...
сможете пояснить? | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 14:13)
| | Дело в том, что первое правило
RewriteRule (.*) index.php?run=$1&q=%1 [L]
| сработает только если будет выполнено условие
RewriteCond %{QUERY_STRING} ^q=(.*)
| Т.е. в строке запроса появится фрагмент ?q=, если такого фрагмента нет, то обработчик модуля mod_rewrite идет дальше к правилу
RewriteRule (.*) index.php?run=$1 [L]
| Аналогично наоборот, если в строке запроса есть ?q=, то сработает первое правило (RewriteRule), а [L] не даст mod_rewrite идти дальше.
>откуда строчка RewriteRule (.*) index.php?run=$1&q=%1 [L] получает $1 если оно описывается
>только тут RewriteRule (.*) index.php?run=$1 [L]... извините за бред...
На самом деле $1 это просто ссылка на первые скобки в RewriteRule, у вас два RewriteRule и у каждого есть скобки (.*), именно на них ссылается $1. | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 14:21)
| | вроде понял... но еще один момент...
вот
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?run=$1 [L]
|
RewriteCond - определяет условие ??! где REQUEST_FILENAME - это что ? и
RewriteRule (.*) index.php?run=$1 [L] - что здесь захватывает маска (.*) ?
человеческим языком не могу описать.... если понятно то поясните и это. | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 14:40)
| | >что здесь захватывает маска (.*) ?
Все захватывает. Это условие захватывает всю строку запроса (правда из-за RewriteRule отсекаются все GET-запросы, т.е. ? и все дальше). | |
|
|
|
|
|
|
|
для: Alph[p]a
(13.04.2011 в 14:40)
| | >где REQUEST_FILENAME - это что ?
REQUEST_FILENAME - это имя файла к которому вы обращаетесь. | |
|
|
|