Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > mod_rewrite почему такой результат?


Автор: maxipub 12.7.2011, 22:14
.htaccess:

Код

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?var=$1


index.php:

Код

<?php var_dump($_GET['var']); ?>


запрос:

http://localhost/blablabla.php?bla=bla

результат:

Код

string(13) "blablabla.php"


почему не:

"blablabla.php?bla=bla"

??? smile 

Автор: Absinthe 13.7.2011, 00:47
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Автор: skyboy 13.7.2011, 00:49
потому что http://httpd.apache.org/docs/2.1/rewrite/flags.html#flag_qsa

Автор: srt 13.7.2011, 02:47
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Автор: maxipub 13.7.2011, 07:45
.htaccess:

Код

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?var=$1 [L,QSA]


результат тот же smile 

Автор: ayax2005 13.7.2011, 09:37
%{QUERY_STRING} ???

Автор: skyboy 13.7.2011, 11:54
сорри, просмотрел РНР код.
надо так:
Код

<?php 
var_dump($_GET['var']); 
var_dump($_GET['bla']); 
?>


Добавлено @ 11:55
а не "blablabla.php?bla=bla" потому что в результате mod_rewrite эти все "$1" не начинают обрабатывать query-часть по-особенному. парсятся параметры по-прежнему:
Цитата

blablabla.php?bla=bla => Array('bla' => 'bla')
index.php?var=blablabla.php&bla=bla => Array('var' => 'blablabla.php', 'bla' => 'bla')

Автор: Absinthe 13.7.2011, 12:08
maxipub, читай внимательно ответы.
Решение тебе уже дали.

Автор: maxipub 18.7.2011, 12:01
Ээ... ребята, по-моему, мы друг друга немного не поняли.

Мне не надо чтоб строка запроса дописывалась к условию. Мне надо чтоб все, что после корневого слэша, передавалось переменной:

localhost/***
$var = "***";

localhost/blablabla.php?bla=bla
$var = "blablabla.php?bla=bla";

И т.д. Как такое сделать?

Автор: ayax2005 18.7.2011, 12:14
А при чём тут htacсess? Вы про $_SERVER слышали?

Автор: maxipub 18.7.2011, 12:53
ayax2005, ну я временно так и сделал. Но это не очень красиво, ИМХО. Надо бы все сделать через .htaccess, по-человечески. Ведь без рерайта урлов тут все равно не обойтись, т.к. надо посылать обработку всех запросов на один скрипт.

Автор: skyboy 18.7.2011, 17:19
вот получил бі после реврайта РНР такой запрос: 
Код

localhost/index.php?var=blablabla.php?bla=bla

следуя твоей логике.
как ему понять, что вопреки спецификации надо обработать "?bla=bla" просто как строку? smile
URL rewriting должен работать и работает прозрачно для РНР. все, что можно узнать об "исходном" URL - в некоторых полях $_SERVER. и всё.

Автор: maxipub 18.7.2011, 19:20
skyboy, ok

Автор: Sanchezzz 18.7.2011, 23:45
если на сайте задействован реврайт то появляется перемененная $_SERVER["REAL_FILE_PATH"];    если нет то ее нет.

if(!empty($_SERVER["REAL_FILE_PATH"]))    $url = $_SERVER["REAL_FILE_PATH"];    

Автор: skyboy 21.7.2011, 14:31
Цитата(Sanchezzz @  18.7.2011,  22:45 Найти цитируемый пост)
$_SERVER["REAL_FILE_PATH"];

ты что-то путаешь.
в $_ENV - http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#EnvVar, в $_SERVER  - REQUEST_URI

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)