PDA

View Full Version : [Apache htaccess] ricerca stringa e redirect su sottodominio


citus
13-06-2012, 15:42
Salve oh popolo,
stessa situazione del precedente thread www.hwupgrade.it/forum/showthread.php?t=2454730
ma nuova problematica.

Riassumo:
Joomla 1.7, modalità multisite sito consumer e business, il www.miosito.it è il sito principale. Definito un sottodominio business.miosito.it che punta NON alla sottocartella /business ma direttamente alla / per poter sfogliare il secondo sito di joomla (ricordo che è in multisites!)

Il sito "business" è caratterizzato da una particolare stringa nei path navigati, ad esempio "bsn":

www.miosito.it/qualsiasipath per il sito lato customer
business.miosito.it/qualsiasipath-bsn per il sito versione business

Dato che è tutto gestito dal multisites di joomla, se io vado su:
www.miosito.it/qualsiasipath-bsn vedo correttamente la pagina business, ma vorrei che quando è presente la stringa "bsn" si venga redirezionati automaticamente sul business.miosito.it/qualcosa-bsn

Questo sia per questione di link delle news, sia per motivi "politici".

Ho provato diverse formule, ma non ho mai fatto roba simile e ogni tanto mando in loop mezzo mondo.
Allo stesso modo, se qualcuno inserisce manualmente la url
business.miosito.it/qualsiasipath (senza il bsn)
vorrei che venisse rimandato sulla home di www.miosito.it

Innanzi tutto: Si può fare via htaccess o bisogna intervenire direttamente su apache?

Posto alcuni tentativi:

# cerco la stringa bsn e mi sposto nel sottodominio business
RewriteCond %{HTTP_HOST} http://www.miosito.it
RewriteCond %{QUERY_STRING} ^(.*bsn)$
RewriteRule ^(.*)$ http://business.miosito.it/$1 [R=301,L]
# FUNZIONA, più o meno..., ma mi impalla la home, che va in loop (http://business.miosito.it/http://business.miosito.it/http://business.miosito.it/...)



RewriteCond %{HTTP_HOST} http://business.miosito.it
RewriteCond %{QUERY_STRING} !^(.*bsn)$
RewriteRule .* http://www.miosito.it/home [R=301,L]


Non pretendo la pappa pronta, solo qualche indicazione sulla reale fattibilità ed efficacia via htaccess, senza il rischio di compromettere troppo le prestazioni del sito :)

Non disdegno link a documentazione per scimmie ;)

Grazie, io continuo a cercare, se trovo qualcosa aggiorno quì

citus
14-06-2012, 10:51
Auto rispondo:
sono un puzzone! :muro:
Non ho bisogno di regole di rewrite... ma di redirect...!
:doh:

Appena funziona posto il codice, nel frattempo eventuali commenti sono comunque ben accetti :D

citus
29-06-2012, 10:54
Allora, aggiornamento, ho scritto delle regole che funzionano, ma c'è qualcosa che non torna.
La rewrite che mi permette di TORNARE al www se NON è presente una stringa mi restituisce come risultato:

www.miosito.it/index.php

anzichè postarsi dietro il path originale, ad esempio www.miosito.it/prodotti
Ho provato a scrivere nella rewrite PIPPO e mi ha restituito
www.miosito.it/PIPPPOindex.php

Qualcuno mi sa suggerire qualcosa? Perchè non mi si porta dietro il path anche se indico $1 ?

Altra cosa, perchè se le metto dopo le regole di joomla (come credo sia normale...) non mi scattano? :O

Ecco il file definitivo e funzionante con bug :)
Magari torna utile a qualcuno.

RewriteBase /


# regole di default dei sottodomini, create da Plesk. Ho commentato la prima riga perchè non mi serve
#RewriteCond %{HTTP_HOST} ^www\.business\.miosito\.com$ [OR]
RewriteCond %{HTTP_HOST} ^business\.miosito\.com$
RewriteRule ^/?$ "home\-bsn" [R=301,L]

#RewriteCond %{HTTP_HOST} ^www\.business\.miosito\.it$ [OR]
RewriteCond %{HTTP_HOST} ^business\.miosito\.it$
RewriteRule ^/?$ "home\-bsn" [R=301,L]



# REWRITE by CITUS
# cerco la stringa bsn se navigo nel www e riscrivo l'indirizzo business
#RewriteCond %{HTTP_HOST} ^miosito\.it$ [OR] #commentata perchè m matchava sempre... doh...
RewriteCond %{HTTP_HOST} ^www\.miosito\.it$
RewriteRule ^(.*)bsn$ "http\:\/\/business\.miosito\.it/$1bsn" [R=301,L]

# se sto nel business e manca -bsn torno nel www (escludo la home-bsn)
RewriteCond %{HTTP_HOST} ^business\.miosito\.it$
RewriteCond %{REQUEST_URI} !home\-bsn$
RewriteCond %{REQUEST_URI} !bsn
RewriteRule ^(.*)$ "http\:\/\/www\.miosito\.it/$1" [R=301,L]
#RewriteRule ^(.*)$ "http\:\/\/www\.miosito\.it/PIPPO$1" [R=301,L] provato a mettere PIPPO per verificare che scattasse la rewrite.



## Begin - Joomla! core SEF Section.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.

citus
29-06-2012, 11:32
Aggiungo che provando le regole, così come sono scritte, sul sito http://htaccess.madewithlove.be/
funzionano, quindi
business.miosito.it/quellochevoglio
diventa correttamente
www.miosito.it/quellochevoglio

anzichè
www.miosito.it/index.php
che sembra generato perchè scatta qualche regola di joomla successivamente.

Idee?

citus
29-06-2012, 12:54
Altra evoluzione.
Ho messo
RewriteCond %{SERVER_NAME} ^business\.miosito\.it$
RewriteCond %{REQUEST_URI} !^home
RewriteCond %{REQUEST_URI} !bsn
RewriteRule ^(.+)$ "http\:\/\/www\.miosito\.it/$1" [R=301,L]

Con ServerName anzichè HTTP_HOST.

citus
29-06-2012, 18:37
Sono commosso dalla partecipazione, ma continuo a scrivere perchè prima o poi a qualche sfigato servirà il percorso che ho fatto :)

Le regole di joomla non c'entrano niente, concentriamoci sulle rewrite specificate.

FUNZIONANO.
Se scrivo un indirizzo
business.miosito.it/prodotti
diventa correttamente
www.miosito.it/prodotti

Peccato che non navigo più nel sito business... perchè ottengo che:
business.miosito.it/qualsiasipath-b2b
diventa inesorabilmente
www.miosito.it/index.php

Cosa non torna???
Devo implementare una regola nuova per vedere correttamente le pagine lato business???

Ecco il file attuale:

RewriteBase /


# regole di default dei sottodomini, create da Plesk. Ho commentato la prima riga perchè non mi serve
#RewriteCond %{HTTP_HOST} ^www\.business\.miosito\.com$ [OR]
RewriteCond %{HTTP_HOST} ^business\.miosito\.com$
RewriteRule ^/?$ "home\-bsn" [R=301,L]

#RewriteCond %{HTTP_HOST} ^www\.business\.miosito\.it$ [OR]
RewriteCond %{HTTP_HOST} ^business\.miosito\.it$
RewriteRule ^/?$ "home\-bsn" [R=301,L]



# REWRITE by CITUS
# cerco la stringa bsn se navigo nel www e riscrivo l'indirizzo business
#RewriteCond %{HTTP_HOST} ^miosito\.it$ [OR] #commentata perchè m matchava sempre... doh...
RewriteCond %{HTTP_HOST} ^www\.miosito\.it$
RewriteRule ^(.*)bsn$ "http\:\/\/business\.miosito\.it/$1bsn" [R=301,L]

# se sto nel business e manca -bsn torno nel www (escludo la home-bsn)
RewriteCond %{HTTP_HOST} ^business\.miosito\.it$
RewriteCond %{REQUEST_URI} !home
RewriteCond %{REQUEST_URI} !b2b
RewriteRule ^(.*)$ "http\:\/\/www\.miosito\.it\/$1" [R=301,L]
#RewriteRule ^(.*)$ "http\:\/\/www\.miosito\.it/PIPPO$1" [R=301,L] provato a mettere PIPPO per verificare che scattasse la rewrite.


In neretto la parte imputata, se la decommento non mi funge il ritorno dal business al www.