Ciao Luigi,
Luigi M. wrote in post #961635:
Io sapevo che l’alternativa era anche il file .htaccess ma poiché avevo
chiesto aiuto in proposito al supporto del mio webhosting il quale mi
aveva detto che non si poteva risolvere il problema con l’.htaccess ma
solo con la programmazione, non avevo neppure postato la domanda…
…vatti a fidare.
Hehehehe, capita
Comunque per questo tipo di cose, l’uso di mod_rewrite nel file
.htaccess di solito è la scelta ovvia.
Ho aggiunto le righe da te suggerite a quelle che avevo già il risultato
è il seguente:
ErrorDocument 404 /404.html
RewriteCond %{QUERY_STRING} ^category=File-Sharing$
RewriteRule ^$ http://www.software-windows.net/404.html [R=404,L]
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
è tutto corretto oppure c’è qualche cosa che non va?
In linea di massima è corretto.
Ma dipende da cosa vuoi fare
Alla fine del post ti metto un esempio completo.
Esaminiamo cosa abbiamo:
ErrorDocument 404 /404.html
qui diciamo che quando abbiamo un errore 404 deve mostrare la pagina
/404.html
RewriteCond %{QUERY_STRING} ^category=File-Sharing$
RewriteRule ^$ http://example.net/404.html [R=404,L]
se la pagina richiesta è Example Domain (e
SOLO questa) allora ritorna un errore 404 e mostra la pagina 404.html
RewriteRule ^$ index.html [QSA]
quando si richiede http://example.net/ prova a leggere
Example Domain
RewriteRule ^([^.]+)$ $1.html [QSA]
per ogni richiesta (ad esempio http://example.net/about) prova a
caricare la pagina html (ad esempio http://example.net/about.html)
In RoR si usa quando salvi le pagine di cui fai la cache in public.
RewriteCond %{REQUEST_FILENAME} !-f
se il file richiesto non esiste
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
invia la richiesta a dispatch.fcgi
Mi sai anche dire come si impone il RewriteCond qualsiasi sia la stringa
dopo category=
alla fine si tratta semplicemente di espressioni regolari (cerca regexp
per maggiori informazioni)
se ad esempio vuoi che tutte le pagine che contengono la query string
“category=File-Sharing” (anche se è in mezzo ad altro) allora andrai ad
usare:
RewriteCond %{QUERY_STRING} ^(.&)?category=File-Sharing(&.)?$
RewriteRule ^(.*)$ http://example.net/404.html [R=404,L]
e riguardo la tua domanda, la risposta è:
RewriteCond %{QUERY_STRING} ^(.&)?category=(.)(&.)?$
RewriteRule ^(.)$ http://example.net/404.html [R=404,L]
Quindi io userei un file .htaccess fatto così:
file .htaccess
abilito gli handler cgi e fcgi
in base ai moduli installati
AddHandler fastcgi-script .fcgi
AddHandler fcgid-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
abilito RewriteEngine
RewriteEngine On
errori 404 alla pagina 404.html
ErrorDocument 404 /404.html
errori 500 alla pagina 500.html
ErrorDocument 500 /500.html
se esiste il file “system/maintenance.html”
allora il sito è in manutenzione (503)
ErrorDocument 503 /system/maintenance.html
RewriteCond %{REQUEST_URI} !.(css|gif|jpg|png)$
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ - [redirect=503,last]
se la query string contiene “category=” dai errore 404
RewriteCond %{QUERY_STRING} ^(.&)?category=(.)(&.)?$
RewriteRule ^(.)$ http://example.net/404.html [R=404,L]
da / a /index.html
RewriteRule ^$ index.html [QSA]
controlla pagine cached
RewriteRule ^([^.]+)$ $1.html [QSA]
altrimenti se il file non esiste
RewriteCond %{REQUEST_FILENAME} !-f
invia il tutto a dispatch.fcgi
(aggiunto anche supporto HTTP Authentication)
RewriteRule ^(.*)$ dispatch.fcgi
[E=X-HTTP_AUTHORIZATION:%{HTTP:Authorization},QSA,L]
la RewriteRule sopra va su una sola riga
Grazie mille
Di nulla
Spero di non aver fatto errori.
PS: ricorda sempre di usare example.com etc. etc.
–
Duilio R.
http://sinetris.info