Почему моя переменная не помещается в $ _GET? - PullRequest
1 голос
/ 16 июня 2009

Может быть, я что-то упустил, но я не могу понять это.

У меня есть ReWriteRule:

RewriteRule ^view/(\w+)$ view.php?mmdid=$1 [L]

и когда я захожу на mydomain.org/view/3, массив $ _GET пуст. Нет ключа 'mmdid'.

Однако, когда я изменяю свое правило на что-то другое, например:

RewriteRule ^viewz/(\w+)$ view.php?mmdid=$1 [L]

работает нормально, когда я захожу на mydomain.org/viewz/3. Я получаю массив ([mmdid] => 1) при печати $ _GET.

Нет других подобных правил, которые могли бы конфликтовать, и я перезагрузил apache.

Есть идеи, почему это происходит? Является ли «просмотр» ключевым словом или чем-то еще?

Вот содержимое журнала перезаписи:

192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a61030/subreq] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] add path info postfix: /path/to/webroot/view.php -> /path/to/webroot/view.php/1
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php/1 -> view.php/1
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (3) [perdir /path/to/webroot/] applying pattern '^(.*)$' to uri 'view.php/1'
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (4) [perdir /path/to/webroot/] RewriteCond: input='mydomain.org' pattern='^www\.mydomain\.org$' => not-matched
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2a54000/initial] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php
192.168.204.187 - - [15/Jun/2009:13:01:19 --0400] [mydomain.org/sid#2787ab8][rid#2930e58/subreq] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/1

Вот вывод журнала при использовании просто ^ v / (\ w +) $ ....

192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] add path info postfix: /path/to/webroot/v -> /path/to/webroot/v/1
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/v/1 -> v/1
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] applying pattern '^v/([0-9]+)$' to uri 'v/1'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (2) [perdir /path/to/webroot/] rewrite 'v/1' -> 'view.php?mmdid=1'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) split uri=view.php?mmdid=1 -> uri=view.php, args=mmdid=1
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (3) [perdir /path/to/webroot/] add per-dir prefix: view.php -> /path/to/webroot/view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (2) [perdir /path/to/webroot/] strip document_root prefix: /path/to/webroot/view.php -> /view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a63038/initial] (1) [perdir /path/to/webroot/] internal redirect with /view.php [INTERNAL REDIRECT]
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php -> view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] applying pattern '^v/([0-9]+)$' to uri 'view.php'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] strip per-dir prefix: /path/to/webroot/view.php -> view.php
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (3) [perdir /path/to/webroot/] applying pattern '^(.*)$' to uri 'view.php'
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (4) [perdir /path/to/webroot/] RewriteCond: input='mydomain.org' pattern='^www\.mydomain\.org$' => not-matched
192.168.204.187 - - [15/Jun/2009:13:10:09 --0400] [mydomain.org/sid#2787ab8][rid#2a5ebc0/initial/redir#1] (1) [perdir /path/to/webroot/] pass through /path/to/webroot/view.php

Спасибо,

Ответы [ 4 ]

2 голосов
/ 16 июня 2009

Возможно, имя вашего скрипта конфликтует с перезаписью. Попробуйте переименовать ваш скрипт в view.page.php, ведь если вы переписываете, не имеет значения, как называется скрипт.

Для получения дополнительной информации о том, как вызывается ваш скрипт, используйте

var_dump($_SERVER);
1 голос
/ 16 июня 2009

Это, вероятно, MultiViews, что вызывает такое поведение. Попробуйте отключить его:

Options -MultiViews
1 голос
/ 16 июня 2009

'view' никоим образом не является ключевым словом или зарезервированным словом.

(удалена отладочная информация, которая привела нас к решению)

Внимательно изучая логи перезаписи, я вижу следующую строку:

 applying pattern '^(.*)$' to uri 'view.php/1'

эта строка показывает, что у вас включено MultiViews (поскольку ваш запрос не view.php / 1, а view / 1), поэтому view / внутренне преобразуется в view.php / перед входом в механизм перезаписи потому что есть файл с тем же именем и известным расширением. Вы можете отключить MultiViews для этого файла или каталога или изменить имя скрипта или каталога, чтобы MultiView не запускался.

0 голосов
/ 16 июня 2009

Я думаю, что у Винко все в порядке с проблемой RewriteCond. Ваше правило перезаписи "просмотра" имеет условие, которое не выполняется, поэтому его даже не проверяют.

...