Получение mod_rewrite для передачи параметров $ _GET? - PullRequest
2 голосов
/ 11 июля 2010

Здесь есть еще пара вопросов на эту же тему, которые я прочитал, но у меня они немного другие. Я пытаюсь сделать очень простой mod_rewrite:

RewriteEngine on
RewriteRule ^go/([^/\.]+)/?$ /go.php?page=$1

go.php выглядит так:

<?php
ini_set('display_errors',1);
if(isset($_GET['page'])){
    echo 'page='.$_GET['page'];
}else{
    echo 'oh shnizzle!';
}
?>

Теперь, когда я захожу на /go/someword в моем браузере, параметр $_GET «someword» НЕ передается, и я получаю сообщение «о, shnizzle!» каждый раз. По каким возможным причинам я не могу передать какие-либо параметры $_GET через mod_rewrite?

Ответы [ 3 ]

13 голосов
/ 11 июля 2010

Возможно, вы включили MultiViews. Добавьте это в начало вашего .htaccess файла:

Options -MultiViews

И проблема должна исчезнуть, надеюсь.

Чтобы немного рассказать о том, что происходит в этом случае, ваш URL /go/someword указывает на несуществующий ресурс, поэтому MultiViews преобразует его в /go.php, который существует. Когда это происходит, бит /somewhere передается в PHP как $_SERVER['PATH_INFO'], но go.php не соответствует вашему правилу перезаписи, поэтому перезапись не выполняется для записи этой строки запроса.

8 голосов
/ 11 июля 2010

Вам нужен флаг QSA (добавление строки запроса) в ваше правило перезаписи.

RewriteEngine on
RewriteRule ^go/([^/\.]+)/?$ /go.php?page=$1 [QSA]
0 голосов
/ 11 июля 2010

Несколько идей ...

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^/go/([^/\.]+)/?$ /go.php?page=$1 [QSA]

Это должно остановить запуск правил mod_rewrite, если запрашивается допустимая страница, скрипт или каталог. Это также добавит любые существующие строки запроса.

В файле go.php у меня будет следующее:

<code><?php
ini_set('display_errors',1);
echo '<b>$_GET Variables</b><pre>';
var_dump( $_GET );
echo '
'; ?>

Таким образом, вместо того, чтобы искать конкретную переменную (по крайней мере, до тех пор, пока она не будет себя вести), вы сможете точно узнать, какие переменные GET передаются в сценарий.

...