Rewrite Rule

danlupo

Utente Attivo
13 Lug 2009
73
0
0
Salve,

quest'argomento ho visto è già stato trattato diverse volte nel forum ma tantè non sono riuscito a capire come trovare una soluzione al problema.

Nel PHPInfo() ho nel loaded modules mod_rewrite..

il file .htaccess funziona perchè mi reindirizza correttamente alla pagina 404 personalizzata.

Fatta questa premessa il problema è che non mi funzionano le rewriterule.

Ho un indirizzo http://localhost:83/public/ita/home_ita.php?menu=foto
Vorrei che comparisse come http://localhost:83/public/ita/home_ita.php

Ho impostato una regola in questo modo

PHP:
RewriteEngine on 
RewriteRule ^http://localhost:83/public/ita/home_ita.php$ http://localhost:83/public/ita/home_ita.php?menu=$1

provando anche ad utilizzare


PHP:
RewriteEngine on 
RewriteRule ^home_ita.php$ home_ita.php?menu=$1

Ma non funziona in nessun modo..

Dove potrebbe essere l'errore?

Grazie Daniele
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
43
Sanremo
Il primo tentativo non può assolutamente funzionare. Estratto dalla guida ufficiale:
RewriteRule basics

A RewriteRule consists of three arguments separated by spaces. The arguments are

1. Pattern: which incoming URLs should be affected by the rule;
2. Substitution: where should the matching requests be sent;
3. [flags]: options affecting the rewritten request.

The Pattern is always a regular expression matched against the URL-Path of the incoming request (the part after the hostname but before any question mark indicating the beginning of a query string).
Quindi la parte dell'hostname non viene considerata, ma si potrebbe usare in una condizione (RewriteCond).

Per quanto riguarda la seconda, invece, nella Substitution fai riferimento ad una back-reference che non esiste nel Pattern.

Sempre preso dalla guida:
The Substitution can also contain back-references to parts of the incoming URL-path matched by the Pattern. Consider the following:

RewriteRule ^/product/(.*)/view$ /var/web/productdb/$1

The variable $1 will be replaced with whatever text was matched by the expression inside the parenthesis in the Pattern. For example, a request for http://example.com/product/r14df/view will be mapped to the path /var/web/productdb/r14df.

If there is more than one expression in parenthesis, they are available in order in the variables $1, $2, $3, and so on.
 

danlupo

Utente Attivo
13 Lug 2009
73
0
0
Salve, ritorno ora all'argomento perchè ho completato il sito (o quasi) e sto curando i dettagli.

Ho seguito diverse guide su web per la riscrittura dell'url ed utilizzando un Mod Rewrite Generator ho scritto questo htaccess:

Codice:
DirectoryIndex http://localhost:83/index.php       
ErrorDocument 404 http://localhost:83/index.php?menu=404
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/]*)\.html$ /index.php?menu=$1 [L]
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?menu=$1&tipo=$2 [L]

Controllando il PHP_INFO() noto che c'è tra i Loaded Modules : mod_rewrite

Vorrei sapere perchè alla fine nella barra degli indirizzi rimane la querystring:

http://localhost:83/index.php?menu=scuola
http://localhost:83/index.php?menu=menu&tipo=fissi

Grazie Daniele
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Conosco un noto provider di hosting (di cui non farò il nome) nei cui spazi Web il mod rewrite non funziona MAI. Non vorrei che tu fossi finito nelle loro mani...
 

danlupo

Utente Attivo
13 Lug 2009
73
0
0
Eliox le bestemmie per la pubblicazione me le sto conservando per settimana prossima. :D

Per ora sto provando tutto in locale ma dato che il dominio sara ruba mi sa che non ci sbatterò troppo la testa. Giusto ?!
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
43
Sanremo
Non ci siamo. Il mod_rewrite agisce nel parsing dell'url richiamato dal browser, ma la "riscrittura" dell'url è solo lato server!!!!! Il che vuol dire che l'indirizzo che digiti sul browser non può cambiare!

Le regole che tu hai impostato servono a questo:

Digitando nel browser ad esempio: http://www.example.com/principale.com

avviene il matching con la prima regola e l'url viene riscritto in questo modo: http://www.example.com/index.php?menu=principale

Digitando invece: http://www.example.com/principale/categoria1.html

avviene il matching con la seconda regola e l'url riscritto è:
http://www.example.com/index.php?menu=principale&tipo=categoria1

Gli eventuali link nelle pagine devono essere scritti seguendo le stesso regole, quindi invece di scrivere un link come http://www.example.com/index.php?menu=principale&tipo=categoria1 nella pagina HTML deve essere scritto come http://www.example.com/principale/categoria1.html
 

danlupo

Utente Attivo
13 Lug 2009
73
0
0
ehm diciamo ke non le ho impostate io ma un sito internet che le genera automaticamente.. Comunque mi sa che è meglio che evito i web generator:rolleyes:
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
43
Sanremo
Non ne ho mai provati, ma mi sembra che abbia fatto il suo lavoro egregiamente. Cosa è che non funziona?
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
43
Sanremo
Forse dovresti leggere con più attenzione le risposte :hammer:

Gli eventuali link nelle pagine devono essere scritti seguendo le stesso regole, quindi invece di scrivere un link come http://www.example.com/index.php?men...ipo=categoria1 nella pagina HTML deve essere scritto come http://www.example.com/principale/categoria1.html

Questo vuol dire che negli script PHP che usi per generare le pagine adesso usi, ad esempio:

PHP:
$menu_name = "principale";
$link_content = '<a href="/index.php?menu=' . $menu_name . '">Principale</a>';

Invece dovresti scrivere:
PHP:
$menu_name = "principale";
$link_content = '<a href="/' . $menu_name . '.html">Principale</a>';

A questo punto il mod_rewrite interpreterà correttamente l'URL passato dal browser secondo le regole che hai postato prima.
 
Discussioni simili
Autore Titolo Forum Risposte Data
LaKanka Problema rewrite rule file .htaccess Apache 7
L php rewrite PHP 1
A [PHP] ERRORE QUANDO CAMBIO SLUG NEL CMS e REWRITE PHP 6
I Url rewrite con .htaccess funziona ma poi mostra indirizzo "reale" nella barra di navigazione Apache 1
C [PHP] Url Rewrite titolo pagina in url PHP 3
C [Apache] Rewrite url Apache 2
S [ASP] url rewrite Classic ASP 0
P url rewrite htaccess Apache 0
M Rewrite percorso .... Apache 1
felino [Mod_rewrite] Errore nel rewrite Apache 2
F mod rewrite PHP 0
F Url rewrite SEO e Posizionamento 0
altrove redirect 301 alla stessa pagina con un url rewrite PHP 0
Eugene Redirect 301 tra pagine con url rewrite Apache 0
L file .htaccess non funzionante in url rewrite HTML e CSS 0
R Url Rewrite "inverso" Web Server 0
M Rewrite URL pagine Classic ASP 6
A url rewrite e tag TITLE PHP 1
M Rewrite di URL con .htaccess Apache 1
P AddModule mod_rewrite.c non funzionante per rewrite Apache 3
A Url Rewrite, qualcosa non funziona Apache 2
K Isapi rewrite Web Server 1
L Url rewrite .htaccess senza database Apache 1
M Url rewrite .htaccess Apache 2
WpStyle htaccess e rewrite url Apache 1
A Modulo rewrite Apache 1
G Configurare Mod Rewrite su file .Htaccess Apache 0
A [PHP]Rewrite PHP 3
F [APACHE] rewrite Apache 0
Web Designer Plugin SEO: Mod Rewrite vBulletin CMS (Content Management System) 0
A rewrite .htacces Web Server 20
G chiarimenti su mod rewrite Web Server 4
SolidSnake4 mod rewrite Apache 5
L Utilizzo Mod Rewrite Classic ASP 2
V link interni a fondo pagina e url rewrite Classic ASP 2
C Rewrite pagine PHP PHP 0
SolidSnake4 mod-rewrite PHP 3
S url rewrite due variabili Web Server 0
T come si url-rewrite con phpnuke? PHP 1

Discussioni simili