.htacces não funciona

2

eu tenho uma regra de reescrita muito simples, no entanto, não está funcionando.

eu tenho o seguinte:

#old see edits for newer versions
RewriteCond %{HTTP_REFERER}           ^localhost:8080(/|$)
RewriteRule ^/downloads/.*  /somePackage/index.php?id=5  [NC,C]
RewriteRule ^/downloads   /somePackage/index.php?id=2  [NC,L]

parece que não passa o RewriteCond , porque é este o caso?

quando eu tento isso:

RewriteRule downloads/?    /somePackage/index.php?id=2 [NC,L]

parece funcionar para localhost:8080/downloads

mas quando eu tento:

RewriteRule downloads/.*/?    /somePackage/index.php?id=5 [NC,L]

não funciona, por que isso não funciona? o que devo fazer em vez disso?

editar:

i este é o código atual que funciona apenas para localhost:8080/downloads e localhost:8080/downloads/ , mas não quando eu adiciono algo após a barra

RewriteRule downloads/somedownload/?  /somePackage/index.php?id=5  [NC,L]
RewriteRule downloads/?   /somePackage/index.php?id=2  [NC,L]

edição 2:

aqui está o código .htaccess usado para isso.

# Only the URLs /downloads and /downloads/ (with and without trailing slash)
RewriteRule ^downloads/?$ /somePackage/index.php?id=2 [NC,L]

#gives 404 - Category not found
RewriteRule ^downloads/ignis_desktop$ /somePackage/index.php?id=5 [NC,L]

# Everything else that starts /downloads/<something>
RewriteRule ^downloads/. /somePackage/index.php?id=5 [NC,L]

não consigo encontrar a solução para o 404.

no entanto, com [r=301] parece redirecionar corretamente para a página, mas quebra a finalidade da reescrita: tornar a URL interessante.

    
por Kevin Kloet 31.10.2016 / 10:17

2 respostas

0

eu encontrei a solução para o meu problema,

alterei o rewrite para isso:

RewriteRule ^downloads/somedownload$ /somepackage/index.php?option=com_content&view=article&id=5

embora no meu menu eu possa se referir a páginas como esta:

localhost:8080/home

e iria reescrevê-lo para:

RewriteRule ^home/?    /somepackage/index.php?id=1   [L,NC]
    
por 01.11.2016 / 08:27
0

HTTP_REFERER (se definido) é um URL absoluto que começa com um esquema. por exemplo.

http://localhost:8080/....

Assim, um CondPattern como ^localhost:8080(/|$) nunca corresponderia.

Note também que as diretivas RewriteCond aplicam-se apenas ao único RewriteRule que se segue, nem todas, como o seu primeiro exemplar de código parece sugerir.

RewriteRule ^/downloads   /somePackage/index.php?id=2  [NC,L]

Um RewriteRule padrão como ^/downloads (ou seja, o caminho da URL que começa com uma barra) nunca corresponderá aos arquivos .htaccess por diretório. Em .htaccess files, o prefixo de diretório é primeiro removido do caminho do URL antes da correspondência de padrões. Então, isso precisaria ser ^downloads para corresponder a todos os URLs que começam com /downloads .

RewriteRule downloads/.*/?    /somePackage/index.php?id=5 [NC,L]

Isso não corresponderá a localhost:8080/downloads , pois o padrão exige uma barra final.

ATUALIZAÇÃO:

I want localhost:8080/downloads to go to id=2 and localhost:8080/downloads/somedownload to go to id=5 and localhost:8080/downloads/anotherdownload to go to id=6 however for the question I have compacted it to /downloads/<everything-else> go to id=5

Eu assumo que /downloads não é um diretório físico no sistema de arquivos. Nesse caso, você deve usar um fim de string de âncora ( $ ) no padrão RewriteRule , ou tenha cuidado com a ordem em que você coloca essas diretivas (ou seja, mais específico primeiro).

Tente o seguinte:

# Only the URLs /downloads and /downloads/ (with and without trailing slash)
RewriteRule ^downloads/?$ /somePackage/index.php?id=2 [NC,L]

# Everything else that starts /downloads/<something>
RewriteRule ^downloads/. /somePackage/index.php?id=5 [NC,L]

É discutível se você deve estar pegando tanto /downloads como /downloads/ - idealmente, deve ser um ou outro.

Para capturar uma URL específica (por exemplo, /downloads/somedownload ), isso precisaria ser antes da regra "Tudo o mais ...":

RewriteRule ^downloads/somedownload$ /somePackage/index.php?id=5 [NC,L]
    
por 31.10.2016 / 10:29