Visualizzazione dei risultati da 1 a 6 su 6

Discussione: RewriteCond

  1. #1

    RewriteCond

    Salve a tutti.
    Sto realizzando un sito che utilizza il mod_rewrite.
    Nel mio .htaccess ho:

    codice:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !exhibits
    RewriteCond %{REQUEST_URI} !content
    RewriteRule ^([^/]+)/?$ portfolios.php?id=$1
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !exhibits
    RewriteCond %{REQUEST_URI} !content
    RewriteRule ^([^/]+)/([^/]+)/?$ portfolios.php?id=$1&pag=$2
    RewriteRule ^exhibits/?$ exhibitions.php
    RewriteRule ^exhibits/([^/]+)/?$ exhibitions.php?id=$1
    RewriteRule ^exhibits/([^/]+)/([^/]+)/?$ exhibitions.php?id=$1&pag=$2
    RewriteRule ^content/([^/]+)/?$ content.php?pag=$1
    Funziona tutto.
    Siccome non sono un esperto, volevo però sapere se si può ottimizzare.
    Infatti sono stato costretto a ripetere 2 volte il gruppo
    codice:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !exhibits
    RewriteCond %{REQUEST_URI} !content
    prima di ogni relativa RewriteRule altrimenti non funzionava, ma sicuramente sarà possibile utilizzare un gruppo di RewriteCond per più di una RewriteRule, no? Come? :rollo:

    Poi ancora
    codice:
    RewriteCond %{REQUEST_URI} !exhibits
    RewriteCond %{REQUEST_URI} !content
    Si può scrivere in un'unica RewriteCond che esclude gli indirizzi con le due parole exhibits e content?
    Ripeto, così funziona tutto ma sicuramente non è ottimizzato.
    Grazie


  2. #2

  3. #3
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Originariamente inviato da lupign
    Nessuno?
    Sei nel forum sbagliato.

    Ma soprattutto, l'utilità? Funziona, non svegliare il can che dorme

  4. #4
    Originariamente inviato da chris
    Sei nel forum sbagliato.
    Oooopss... chiedo venia!

    Ma soprattutto, l'utilità? Funziona, non svegliare il can che dorme
    Beh l'utilità è imparare e approfondire, no?
    Dato che ci sto ancora lavorando, non mi pare cosa buona che se dovessi aggiungere un'altra riga di istruzioni con le stesse condizioni, dovrei ripetere una terza volta il blocco di RevriteCond.
    O si deve domandare solo se si è nei guai e perseverare negli errori?

  5. #5
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Originariamente inviato da lupign
    Beh l'utilità è imparare e approfondire, no?
    Dato che ci sto ancora lavorando, non mi pare cosa buona che se dovessi aggiungere un'altra riga di istruzioni con le stesse condizioni, dovrei ripetere una terza volta il blocco di RevriteCond.
    O si deve domandare solo se si è nei guai e perseverare negli errori?
    non esiste un modo per legare un blocco di condizioni ad un blocco di istruzioni da eseguire in alternativa l'una dall'altra.

    quello che puoi fare è semplificare le tue condizioni o rigirarle per far fare loro il contrario di quello che fai ora.

    intanto queste due righe secondo me sono inutili, apache dovrebbe già gestire autonomamente la precedenza a file fisicamente presenti sul server.
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    alternativamente puoi inserire queste quattro righe all'inizio e non preoccuparti più dell'esistenza o meno del file fisico corrispondente:
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ %{REQUEST_FILENAME} [L]

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ %{REQUEST_FILENAME} [L]

    queste due linee inoltre possono essere riassunte in una sola:
    RewriteRule ^([^/]+)/([^/]+)/?$ portfolios.php?id=$1&pag=$2
    RewriteRule ^([^/]+)/?$ portfolios.php?id=$1
    RewriteRule ^([^/]+)(/([^/]+)/?)?$ portfolios.php?id=$1&pag=$3
    anche queste tre linee possono essere riassunte in una sola:
    RewriteRule ^exhibits/?$ exhibitions.php
    RewriteRule ^exhibits/([^/]+)/?$ exhibitions.php?id=$1
    RewriteRule ^exhibits/([^/]+)/([^/]+)/?$ exhibitions.php?id=$1&pag=$2
    RewriteRule ^exhibits(/([^/]+)(/([^/]+)/?)?)?$ exhibitions.php?id=$2&pag=$4
    infine invertendo l'ordine delle regole facendo in modo che exhibits e content vengano intercettate prima puoi eliminare anche quelle condizioni.

    cioè il tuo file può diventare una cosa del genere dove le prime quattro righe credo possano anche essere eliminate:
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ %{REQUEST_FILENAME} [L]

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ %{REQUEST_FILENAME} [L]

    RewriteRule ^exhibits(/([^/]+)(/([^/]+)/?)?)?$ exhibitions.php?id=$2&pag=$4 [L]
    RewriteRule ^content/([^/]+)/?$ content.php?pag=$1 [L]

    RewriteRule ^([^/]+)(/([^/]+)/?)?$ portfolios.php?id=$1&pag=$3 [L]

  6. #6
    Allora ho fatto bene a insistere!
    Grazie molte per il tuo interessamento.

    Ho testato il tutto sostituendo il mio .htaccess con il tuo.
    Però questo:
    codice:
    RewriteRule ^exhibits(/([^/]+)(/([^/]+)/?)?)?$ exhibitions.php?id=$2&pag=$4
    Fa funzionare solo url del tipo exhibits/pippo1/pippo2
    mentre nel mio caso deve essere possibile anche avere url del tipo exhibits/pippo1/
    o anche solo exhibits/ (in tutti i casi con o senza / finale...).

    Ho provato a modificare ma senza riuscirci.
    Mi tengo il mio?


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.