Por que essa diretiva RewriteRule do mod_rewrite não está funcionando no arquivo .htaccess?

3

Eu tenho um site hospedado em um serviço de hospedagem linux el cheapo que estou migrando para meu servidor Mac OS X 10.5 Leopard Server executando o Apache 2.2.8 & PHP 5.2.5 com rewrite_module habilitado e AllowOverride All , mas estou com um problema com as seguintes linhas no arquivo .htaccess :

RewriteEngine On
#RewriteRule ^view/([^/\.]+)/?$ /view.php?item=$1 [L]
#RewriteRule ^order/([^/\.]+)/?$ /order.php?item=$1 [L]
RewriteRule ^category/([^/\.]+)/?$ /category.php?category=$1 [L]

Como você pode ver, eu comentei as diretivas RewriteRule para /view/ e /order/ , então estou lidando apenas com /category/ . Quando tento carregar http://domain.tld/category/2/ , ele executa category.php (adicionei código de depuração para confirmar), mas $_SERVER['REQUEST_URI'] aparece como /category/2/ e $_GET['category'] aparece como vazio.

Normalmente, estou bem com a solução de problemas dos arquivos .htaccess e das diretivas mod_rewrite, mas esse item me deixou perplexo por algum motivo.

Atualização : segui Sugestão de Josh e aqui está o que é despejado em mod_rewrite.log quando tento acessar http://domain.tld/category/2/ :

65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (2) init rewrite engine with requested uri /category/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) applying pattern '.*' to uri '/category/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (1) pass through /category/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] add path info postfix: /Library/WebServer/Documents/tld.domain.www/category.php -> /Library/WebServer/Documents/tld.domain.www/category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix: /Library/WebServer/Documents/tld.domain.www/category.php/13 -> category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri 'category.php/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (1) [perdir /Library/WebServer/Documents/tld.domain.www/] pass through /Library/WebServer/Documents/tld.domain.www/category.php
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] add path info postfix: /Library/WebServer/Documents/tld.domain.www/category.php -> /Library/WebServer/Documents/tld.domain.www/category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix: /Library/WebServer/Documents/tld.domain.www/category.php/13 -> category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri 'category.php/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (1) [perdir /Library/WebServer/Documents/tld.domain.www/] pass through /Library/WebServer/Documents/tld.domain.www/category.php
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (2) init rewrite engine with requested uri /13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) applying pattern '.*' to uri '/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (1) pass through /13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix: /Library/WebServer/Documents/tld.domain.www/13 -> 13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri '13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (1) [perdir /Library/WebServer/Documents/tld.domain.www/] pass through /Library/WebServer/Documents/tld.domain.www/13
    
por morgant 22.10.2009 / 22:34

3 respostas

6

adicione isso ao seu arquivo .htaccess

Options -MultiViews

Eu tive o mesmo problema por horas

eu não sei porque, mas está ativado por padrão no OSX

produz seu erro porque quando você tenta carregar category / ele encontra o category.php e redireciona tudo após a barra para esse arquivo

    
por 03.12.2011 / 01:03
1

Você tem acesso ao httpd.conf? Em caso afirmativo, por favor, adicione ao httpd.conf:

RewriteLog "/tmp/mod_rewrite.log" 
RewriteLogLevel 3

E poste o que esse log diz quando você carrega /category/2 . Remova isso depois de obter as informações necessárias - é um desperdício de recursos do servidor.

EDITAR:

Obrigado pelo log. Algo está reescrevendo o URL para: /category.php/13 . Qualquer outro RewriteRules? Você está usando o FastCGI? E se você renomear category.php para outra coisa, como Category.php ou display_category.php ?

EDIT2:

Como algo parece estar reescrevendo /category/(.*) para /category/$1 e não sabemos o que é, por que você não muda:

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

para:

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

e veja se isso funciona?

    
por 22.10.2009 / 23:10
0

Eu provavelmente estou sendo um idiota aqui, mas não é esse o comportamento esperado? Mod_rewrite altera a URL inline para encontrar o arquivo, as variáveis de ambiente vistas pelo PHP normalmente não mudam.

Acho que você precisa analisar a sequência REQUEST_URI para extrair a variável de categoria.

Marcar

    
por 22.10.2009 / 23:07