2009-06-15 2 views
1

Возможно, мне что-то не хватает, но я не могу понять, как это понять.

У меня есть 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. Я получаю Array ([mmdid] => 1) при печати $ _GET.

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

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

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

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 

благодарственное вы,

ответ

2

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

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

var_dump($_SERVER); 
+0

Это сделало это! Спасибо.Даже не подумал об этом. Почему вы не можете назвать сценарий тем же самым, что и правило? Может ли кто-нибудь пролить свет на это? – barfoon

+0

Для некоторых это может иметь значение, поскольку оно держит вещи более организованными в webroot. – barfoon

+1

Переименование файла скорее устраняет симптомы, чем устраняет причину. И это не очень хорошее решение. – Gumbo

1

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

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

Глядя внимательно в журналы переопределения я вижу эту строку:

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

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

+0

Я опубликовал вывод журнала @ уровня 9, очистил другие правила и запросил страницу один раз. – barfoon

+0

Да, у меня есть 2 правила ниже, чтобы удалить www: RewriteCond% {HTTP_HOST}^www \ .mydomain \ .org $ RewriteRule^(. *) $ Http://mydomain.org/$1 [R = 301, L] – barfoon

1

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

Options -MultiViews 
0

У Vinko это право, я думаю, с проблемой RewriteCond. Правило rewrite вашего представления имеет условие, которое не выполняется, поэтому его даже не проверяют.

Смежные вопросы