Domanda

Ho bisogno di avere:

http://www.example.com/v1/mio-progetto/ reindirizzato a http://esempio.com/mio-progetto/

COSÌ :

(1) rimuovere www da http_host

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

(2) rimuovere la parte 'v1/' di request_uri

RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]

(3) Voglio anche reindirizzare tutti i 404 alla home page.

ErrorDocument 404 /

(4) Infine, tutti i miei documenti risiedono effettivamente in una cartella "v2/" che ospita il sito Web attualmente attivo, ma non voglio "v2" nell'URL, solo "/"

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]

Quindi, ecco le mie regole.La mia domanda è:non ci riesco (2):viene reindirizzato a / (a ​​causa della regola (3), immagino.Penso che l'ordine delle mie regole debba essere errato ma non riesco a farlo bene.Puoi aiutare ?

È stato utile?

Soluzione

La "Regola 3" non è affatto una regola e il suo ordine relativo alle tue RewriteRules non ha importanza.La regola 2 fallisce per qualche altro motivo.Non sono sicuro che risolverà il tuo problema, ma vorrei semplificare un po' le tue regole scrivendole in questo modo:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]

RewriteRule ^v1/(.*) /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule (.*) /v2/$1 [NC,L]

Altri suggerimenti

Dovresti prima scrivere qualsiasi regola che causa un reindirizzamento esterno (R flag) e poi le altre regole.Altrimenti un URL già riscritto può essere utilizzato per un reindirizzamento esterno sebbene fosse destinato solo a un reindirizzamento interno.

Quindi non cambierò l'ordine che hai in questo momento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top