- Home
- Categorie
- La Community Connect.gt
- Tutto sulla Community
- Limiti .htaccess e mod rewrite di Apache
-
@diliberto said:
passo numero 1:
www.google.it/index.php?pagina=001&categoria=004
deve diventare:
www.google.it/001/004.htmlquindi scrivero' nel file .htaccess quanto segue:
RewriteEngine On
RewriteRule ^([^/]+)/([^/]+).html index.php?pagina=$1&categoria=$2..e se volessi chiamarla www.google.it/topolino/pippo.html?
cosi spieghi bene a tutti le possibilità del mod-rewrite
-
@diliberto said:
RewriteEngine On
RewriteRule ^([^/]+)/([^/]+).html index.php?pagina=$1&categoria=$2 Ok, fin qui ci siamo, è il più classico dei rewrite
@diliberto said:passo numero 2:
www.google.it/001/004.html
come qualsiasi altra pagina deve farmi un redirect [301] su:
google.it/001/004.htmlquindi scrivero' nel file .htaccess quanto segue:
RewriteCond %{HTTP_HOST} ^www.google.it$
RewriteRule ^(.*)$ http://google.it/$1 [R=301,L] Perfetto, ogni url richiamato col www viene dirottato sull'host senza www
...aspetta un momento!!
Perchè ?- 'next|N' (next round)
Re-run the rewriting process (starting again with the first rewriting rule). Here the URL to match is again not the original URL but the URL from the last rewriting rule. This corresponds to the Perl next command or the continue command from the C language. Use this flag to restart the rewriting process, i.e., to immediately go to the top of the loop.
But be careful not to create an infinite loop! - 'chain|C' (chained with next rule)
This flag chains the current rule with the next rule (which itself can be chained with the following rule, etc.). This has the following effect: if a rule matches, then processing continues as usual, i.e., the flag has no effect. If the rule does not match, then all following chained rules are skipped. For instance, use it to remove the.www'' part inside a per-directory rule set when you let an external redirect happen (where the
.www'' part should not to occur!).Il Next che ci sta a fare? Perchè deve ri-eseguire il rewrite dopo il redirect?
Quando arrivo sulla pagina google.it/001/004.html (senza WWW) viene reinterpretato htaccess (indipendentemente dal flag Next), che col rewrite mi restituisce il contenuto di google.it/index.php?pagina=001&categoria=004 ma non mi reindirizza a quest'url; o mi sbaglio?
E il Chain? Perdonami, ma non ho tanto chiaro l'intento di questo flag.
E poi quell'$1... ma non c'è nulla di cui fare il match nella Rewrite Rule, non è che $1 prende il match dalla regola precedente (grazie al flag )?
Voglio dire, una regola così:
RewriteCond %{HTTP_HOST} ^www.google.it/(.)$
RewriteRule ^(.)$ http://google.it/$1 [R=301,L]magari spostando il NEXT alla regola di url rewriting, non va bene? Perchè?
In ogni caso, per quale motivo devi eseguire questo troncamento del www, e soprattutto, com'è la situazione?
Sei linkato con www? O è solo google che preferisce mostrare in serp il www in luogo dell'altro?
Forse potrebbe aiutarti questo: http://www.giorgiotave.it/forum/google-sitemaps/14996-dominio-preferito.html
Forse non c'entra nulla, io nel caso te lo suggerisco (anche perchè è abbastanza in topic)Ciao!
- 'next|N' (next round)
-
bel topic
pedro tu sai dirmi come fare il redirect 301 da domain.tld a www.domain.tld con wordpress, che di suo mette un .htaccess tipo questo:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php </IfModule> # END WordPress
te lo chiedo da assoluto GNUrante di mod_rewrite
-
p.s. NC é
'nocase|NC' (no case)
This makes the Pattern case-insensitive, ignoring difference between 'A-Z' and 'a-z' when Pattern is matched against the current URL.
-
@must said:
bel topic
Concordo
Aspetto però sempre la risposta di diliberto, la questione mi interessa e non poco!@must said:
pedro tu sai dirmi come fare il redirect 301 da domain.tld a www.domain.tld con wordpress Bè, dovrebbe bastare modificare il file che crea wordpress in questo modo:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . **http://www.domain.tld**/index.php **[R=301,L]** </IfModule> # END WordPress
Non ho mai provato, ma a occhio dovrebbe fungere.
A meno che l'ora tarda non mi abbia obnubilato il cervelletto; fammi sapere se funziona@must said:
p.s. NC é
'nocase|NC' (no case)
This makes the Pattern case-insensitive, ignoring difference between 'A-Z' and 'a-z' when Pattern is matched against the current URL. Uaz allora ho cannato in pienoP.s. l'ideale sarebbe studiarsi per bene la documentazione, però diverse volte, soprattutto all'inizio, questo [url=http://www.ilovejackdaniels.com/mod_rewrite_cheat_sheet.png]bigino del mod_rewrite mi ha risparmiato parecchio tempo!
-
@petro said:
Non ho mai provato, ma a occhio dovrebbe fungere.
A meno che l'ora tarda non mi abbia obnubilato il cervelletto; fammi sapere se funzionanon funziona
se vado su www.domain.tld/post/ mi rimanda a www.domain.tld/index.php (non ho provato altri url, quindi non so come si comporta negli altri casi possibili).
-
Prima di tutto perdonate la lunga attesa prima di essermi fatto risentire e soprattutto perdonate la rapidità di questo reply (petro leggerò con calma quello che mi chiedi e ne riparleremo di sicuro) ora sono di frettissima...
Fine settimana, lontano da internet ho riflettuto sulla questione, non mi capacitavo che apache non riuscisse a gestire una situazione simile e riflettendo sul problema ho avuto una piccola illuminazione sul modus operandi che ho testato esser corretto e funzionante prima ancora di rileggere questo topic e le vostre risposte.
La soluzione al mio quesito iniziale è molto semplice: apache interpreta in maniera lineare le istruzioni contenute al suo interno, pertanto nel caso sopracitato è sufficiente eseguire il redirect [301] prima del rewriteengine.... banalmente invertendo l' ordine delle righe di istruzioni da me postate
Cordialmente
Alessio
-
petro:
(No Case)
Ha detto bene must, non fa differenza fra 'A-Z' e 'a-z'.
Non prettamente indispensabile al funzionamento dell' esempio sopracitatomust:
prova questo, dovrebbe funzionarti per tutte le pagine non solo per la home e fammi sapere
RewriteCond %{HTTP_HOST} ^google.it
RewriteRule ^(.*)$ http://www.google.it/$1 [L,R=301]
-
@diliberto said:
...che qualcuno mi smentisca....
Cordialmente
AlessioPS scrivere una regola per "ogni pagina del sito" da cui fare il redirect non è una soluzione ammissibile:)
Ciao,
così dovresti salvare "capre e cavoli"
RewriteEngine On
RewriteRule ^([^/]+)/([^/]+).html index.php?pagina=$1&categoria=$2RewriteCond %{HTTP_HOST} ^www.localhost.it$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://localhost/$1 [R=301,L]RewriteCond %{HTTP_HOST} ^www.localhost.it$
RewriteCond %{QUERY_STRING} ^(.)=(.)&(.)=(.)$
RewriteRule ^.*$ http://localhost/%2/%4.html ? [R=301,L]
-
scusate se mi intrufolo nella discussione ma volevo chiedervi come è possibile (se lo è) calcolare il "superlavoro" dovuto all'uso di .htaccess.
si insomma è una manna dal cielo per i motori ma per il server (in hosting!) di un sito affollato credo di no, o sbaglio??
-
@piccolosocrate said:
scusate se mi intrufolo nella discussione ma volevo chiedervi come è possibile (se lo è) calcolare il "superlavoro" dovuto all'uso di .htaccess.
si insomma è una manna dal cielo per i motori ma per il server (in hosting!) di un sito affollato credo di no, o sbaglio??Apache ha a disposizione un utile strumento di benchmark
http://httpd.apache.org/docs/2.0/programs/ab.htmlcon cui è possibile "stressare" il sito
Ovviamente la situazione ideale per siti molto molto frequentati, specialmente se realizzati con cms complessi come Typo3, è comunque inserire le configurazioni che normalmente inseriremmo in .htaccess direttamente in httpd.conf e settare AllowOverride None (prestando attenzione alle differenze di sintassi e di funzionamento per quanto riguarda mod_rewrite)
Teni comunque presente che il parsing di qualsiasi file php (in assenza di un sistema di caching del bytecode) generalmente comporta un overhead maggiore del parsing di .htaccess
-
@fheller said:
Apache ha a disposizione un utile strumento di benchmark
http://httpd.apache.org/docs/2.0/programs/ab.htmlcon cui è possibile "stressare" il sito
Ovviamente la situazione ideale per siti molto molto frequentati, specialmente se realizzati con cms complessi come Typo3, è comunque inserire le configurazioni che normalmente inseriremmo in .htaccess direttamente in httpd.conf e settare AllowOverride None (prestando attenzione alle differenze di sintassi e di funzionamento per quanto riguarda mod_rewrite)
Teni comunque presente che il parsing di qualsiasi file php (in assenza di un sistema di caching del bytecode) generalmente comporta un overhead maggiore del parsing di .htaccess
quindi pesa più un php che un htaccess!
corpo di mille balene!