Intereting Posts
Curl загружает файлы 2.5k + слишком медленно добавьте новый столбец для специальной цены в сетке на панели администратора в magento Перенаправление PHP из Ajax Call Не удается загрузить файлы размером более 8 МБ Сортировка многомерного массива на основе упорядоченного массива Предупреждение: mysql_fetch_row () ожидает, что параметр 1 будет ресурсом как сделать общий заголовок и нижний колонтитул .. большая проблема? PHP удаляет символы после последнего вхождения символа в строку Попытка загрузить изображение (которое отправляется как байт ) на мой домен / сервер в PHP Как разместить значение таблицы в выпадающем меню с MYSQL и PHP Обнаружение переломов в руке с использованием обработки изображений это json и как заменить значения с помощью php-переменных? PHP – хранить информацию без базы данных NO установить тайм-аут сеанса php Создание диаграммы с графическими картами Google на стороне сервера json file

Как mod_rewrite передать параметры $ _GET?

Здесь есть еще несколько вопросов по этой же теме, которые я прочитал, но мой немного отличается. Я пытаюсь сделать очень простой 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 «somord» НЕ передается, и я получаю сообщение «oh shnizzle!». каждый раз. Каковы возможные причины, по которым я не могу передать какие-либо параметры $_GET через mod_rewrite?

Вероятно, вы включили MultiViews . Добавьте это в начало файла .htaccess :

 Options -MultiViews 

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

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

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

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

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

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

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

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

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

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