htaccess, ЧПУ и GET

peter888

Новичок
Здравствуйте..
Собственно надо передать GET-параметры.. перечитал несколько тем, пробовал разные варианты, но почему то не получается

Помогите разобраться.
Вот мой htaccess:
Код:
Options -Indexes

AddDefaultCharset utf-8
RewriteEngine on

RewriteBase /

RewriteRule ^.htaccess$ - [F]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

RewriteRule ^([a-zA-Z0-9-]+)$ index.php?module=$1 [L,QSA]
RewriteRule ^([_a-zA-Z0-9-]+)/([_a-zA-Z0-9-]+)$ index.php?module=$1&param1=$2 [L,QSA]
RewriteRule ^([_a-zA-Z0-9-]+)/([_a-zA-Z0-9-]+)/([_a-zA-Z0-9-]+)$ index.php?module=$1&param1=$2&param2=$3 [L,QSA]
RewriteRule ^([_a-zA-Z0-9-]+)/([_a-zA-Z0-9-]+)/([_a-zA-Z0-9-]+)/([_a-zA-Z0-9-]+)$ index.php?module=$1&param1=$2&param2=$3&param3=$4 [L,QSA]

ErrorDocument 404 /404
на старте в пхп файле ставлю для теста:
PHP:
print_r($_GET);
Переходя по ссылке http://wwwwwww.ru/price выводит:
PHP:
Array ( [module] => price )
А переходя по http://wwwwwww.ru/price?utm=yandex :
PHP:
Array ( [utm] => yandex )
А надо, чтобы было так:
PHP:
Array ( [module] => price [utm] => yandex)
Помогите плиз..
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
RewriteRule ^.htaccess$ - [F] - идиотизм.
RewriteRule ^(.+)/$ /$1 [R=301,L] - querystringappend заыбли.
Дальше вообще трэш и содомия.

Код:
    RewriteRule ^index\.php$ "http://www.example.org/" [qsappend,redirect=permanent,last]

    RewriteCond %{REQUEST_URI} ^/[^\.]+$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule "^.+$" "?path=$0" [qsappend,last]
и реализуйте роутер в PHP коде.
 
Последнее редактирование:

peter888

Новичок
RewriteRule ^.htaccess$ - [F] - идиотизм.
RewriteRule ^(.+)/$ /$1 [R=301,L] - querystringappend заыбли.
Дальше вообще трэш и содомия.

Код:
    RewriteRule ^index\.php$ "http://www.example.org/" [qsappend,redirect=permanent,last]

    RewriteCond %{REQUEST_URI} ^/[^\.]+$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule "^.+$" "?path=$0" [qsappend,last]
и реализуйте роутер в PHP коде.
Сделал так:
Код:
Options -Indexes

AddDefaultCharset utf-8
RewriteEngine on

RewriteBase /

RewriteRule ^index\.php$ "http://example.ru/" [qsappend,redirect=permanent,last]

RewriteCond %{REQUEST_URI} ^/[^\.]+$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "^.+$" "?module=$0" [qsappend,last]

ErrorDocument 404 /404
Но результат аналогичен что был у меня, print_r($_GET) выдает те же результаты, 1:1.

Но этого я не понял:
и реализуйте роутер в PHP коде
Разобрать по полочкам $_GET или что?

Что не так?
 
Последнее редактирование:

peter888

Новичок
что "да".. я же говорю, что результат выдает такой же как и у меня.
PHP:
print_r($_GET);
Переходя по ссылке http://wwwwwww.ru/price выводит:
PHP:
Array ( [module] => price )
А переходя по http://wwwwwww.ru/price?utm=yandex :
PHP:
Array ( [utm] => yandex )
А надо, чтобы было так:
PHP:
Array ( [module] => price [utm] => yandex)
т.е. это при вашем совете такое тоже выдает.

Может надо какие то настройки на сервере сделать?
 

AnrDaemon

Продвинутый новичок
Код:
<IfModule rewrite_module>

  RewriteEngine On
  RewriteBase "/"

  RewriteRule ^index\.php$ "http://test.darkdragon.lan/" [qsappend,redirect=permanent,last]

  RewriteCond %{REQUEST_URI} ^[^\.]+$
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule "^.+$" "?module=$0" [qsappend,last]

</IfModule>
PHP:
<?php

header('Content-Type: text/plain; charset=windows-1251');
print "_SERVER['REQUEST_URI']:\n{$_SERVER['REQUEST_URI']}\n";
print "_SERVER['PHP_SELF']?_SERVER['QUERY_STRING']:\n{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}\n";
print "_GET:\n";
var_export($_GET);
Код:
<stdout>:curl -iI -s -- "http://test.darkdragon.lan/index.php?utm=yandex"
HTTP/1.1 301 Moved Permanently
Date: Sun, 27 Sep 2015 12:36:48 GMT
Server: Apache/2.2.22 (Ubuntu)
Location: http://test.darkdragon.lan/?utm=yandex
Content-Length: 320
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://test.darkdragon.lan/?utm=yandex">here</a>.</p>
<hr>
<address>Apache/2.2.22 (Ubuntu) Server at test.darkdragon.lan Port 80</address>
</body></html>
Код:
<stdout>:curl -i -s -- "http://test.darkdragon.lan/?utm=yandex"
HTTP/1.1 200 OK
Date: Sun, 27 Sep 2015 12:42:05 GMT
Server: Apache/2.2.22 (Ubuntu)
Accept-Ranges: bytes
X-Powered-By: PHP/5.3.10-1ubuntu3.19
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/plain; charset=windows-1251

_SERVER['REQUEST_URI']:
/?utm=yandex
_SERVER['PHP_SELF']?_SERVER['QUERY_STRING']:
/index.php?utm=yandex
_GET:
array (
  'utm' => 'yandex',
)
Код:
<stdout>:curl -i -s -- "http://test.darkdragon.lan/price?utm=yandex"
HTTP/1.1 200 OK
Date: Sun, 27 Sep 2015 12:43:49 GMT
Server: Apache/2.2.22 (Ubuntu)
Accept-Ranges: bytes
X-Powered-By: PHP/5.3.10-1ubuntu3.19
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/plain; charset=windows-1251

_SERVER['REQUEST_URI']:
/price?utm=yandex
_SERVER['PHP_SELF']?_SERVER['QUERY_STRING']:
/index.php?module=price&utm=yandex
_GET:
array (
  'module' => 'price',
  'utm' => 'yandex',
)
С кем спорите?…
 

peter888

Новичок
Я ни с кем не хочу спорить, я констатирую факт.

Скопировал ваш код как .htaccess, так и пхп, 1:1.

Вот результат:


Все по прежнему.
И еще, если прописать: http://хххххххх.ru/articles/2, то будет:


Так что споры тут ни при чем.

Может есть какое то другое решение?
 

WMix

герр M:)ller
Партнер клуба
мальчик, ты это, иди отсюда, почитай книжки а после приходи! твоя картинка далека от жизни
 

peter888

Новичок
Вообшем вы правы, у меня в конфиг-файле стояла такая штуковина:
PHP:
if (strpos($_SERVER["REQUEST_URI"], '?') == true) {
    list($path, $qs) = explode("?", $_SERVER["REQUEST_URI"], 2);
    if (!empty($qs)) parse_str($qs, $_GET);
}
которая меня и сбивала.

Вот нужный мне "разбиратор":
PHP:
$params = explode( "/", $_GET['module'] );
$_GET['module'] = $params[0];
for($i = 1; $i < count($params); $i++) {
    $_GET["param$i"] = $params[$i];
}
Спасибо!
 
Последнее редактирование:
Сверху