Zend / Apache mod_rewrite ... что не так? - PullRequest
0 голосов
/ 14 мая 2009

Следующий URL работает нормально:

http://localhost/index/index/

Однако я не могу _брать переменные $, когда они приходят вот так:

http://localhost/index/index/test/1234/test2/4321

-but-

Я могу, однако, получить переменные следующим образом:

http://localhost/index.php?test=1234&test2=4321
http://localhost/index?test=1234&test2=4321
http://localhost/index/index?test=1234&test2=4321

Почему переменные не отображаются для меня, когда я использую / index / index / var / val?

Ниже вы найдете мой файл .htaccess.

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

Ответы [ 2 ]

3 голосов
/ 15 мая 2009

Zend Framework не делает данные в запросе доступными как переменные $ _GET, для доступа к ним используйте ключ в контроллере :

$test = $this->getRequest()->getParam('test') //$test = 1234

или короче

$test = $this->_getParam('test');
0 голосов
/ 15 мая 2009

Поскольку $_GET содержит переменные в строке запроса - это часть URL после знака вопроса. Обратите внимание, что правила перезаписи в вашем .htaccess файле превращают все URL-адреса, которые не ссылаются на существующие файлы или каталоги, в index.php, без каких-либо следов исходного URL (хотя, как напомнил мне комментарий Гамбо, , он по-прежнему доступен через $_SERVER['REQUEST_URI']. Ваши RewriteRule s не создают строку запроса (т.е. они не ставят знак вопроса в URL), что вам нужно сделать, чтобы использовать $_GET .

Я бы предложил заменить ваш последний RewriteRule чем-то вроде

RewriteRule ^.*$ index.php$0 [NC,L]

То, что $0 добавит исходный URL к index.php - так, например, http://localhost/index/index/test/1234/test2/4321 станет http://localhost/index.php/index/index/test/1234/test2/4321 Тогда запрос будет обработан index.php, а переменная $_SERVER['PATH_INFO'] будет установлена ​​в Оригинальный URL, /index/index/test/1234/test2/4321. Вы можете написать некоторый PHP-код для его анализа и выбрать любые параметры, которые вам нужны.

Если вы не хотите, чтобы /index/index в начале был сохранен в переменной path_info, вы можете использовать RewriteRule, например:

RewriteRule ^/index/index(.*)$ index.php$1 [NC,L]

или

RewriteRule ^(/index)*(.*)$ index.php$2 [NC,L]

чтобы убрать любое количество ведущих /index es.

РЕДАКТИРОВАТЬ : на самом деле, вы можете сохранить свои существующие RewriteRule s и просто посмотреть на $_SERVER['REQUEST_URI'], чтобы получить исходный URI запроса; не нужно возиться с информацией о пути. Затем вы можете разделить это на PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...