.htaccess RewriteRule al percorso senza modificare l’URL

Quindi, ho questo problema:

  1. Sito web di base situato all’indirizzo http://example.com/
  2. Secondo sito web all’indirizzo http://example.com/web2/
  3. Le persone che fanno varie richieste al secondo sito web come http://example.com/myWeb/pg1 e http://example.com/web2/pg2

Recentemente ea causa di altri problemi, ho bisogno di avere un nuovo percorso personalizzato per il secondo sito Web, ma anche di mantenere il primo a funzionare.

L’idea è di consentire agli utenti di accedere al secondo sito Web tramite i seguenti due indirizzi:

  • http://example.com/web2/
  • http://example.com/alternative-url-web2/

La cartella /web2/ effettivamente esiste sul server, ma come posso simulare la cartella /alternative-url-web2/ e “redirect” le richieste a /web2/ ?

Si prega di notare che non voglio cambiare l’URL sul browser, questo deve essere un “reindirizzamento silenzioso”. Inoltre, mi assicuro che tutte le altre richieste come http://example.com/other non vengano reindirizzate dal secondo sito web.

Grazie.


Aggiornamento :

Secondo @anubhava potrei semplicemente risolvere questo problema aggiungendo il mio .htaccess :

 Options +FollowSymLinks -MultiViews RewriteEngine On RewriteBase / RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC] 

Questo probabilmente funziona bene ma ho notato quanto segue:

  • http://ex.com/alternative-url-web2 viene reindirizzato su http://ex.com/web2/ (modifica dell’URL del browser);
  • http://ex.com/alternative-url-web2/ viene reindirizzato su http://ex.com/ (modifica dell’URL del browser);
  • http://ex.com/alternative-url-web2/someRequest funziona correttamente e NON modifica l’URL del browser;
  • http://ex.com/alternative-url-web2/index.php funziona correttamente e NON modifica l’URL del browser;

Nota del sito:

A /web2/ c’è un .htaccess che potrebbe causare il comportamento di reindirizzamento via cavo sopra … Ecco qui il contenuto del file:

  RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L] RewriteRule ^.*$ index.php [NC,L]  

La RewriteRule interna a index.php può causare tutto questo? Se sì, come posso risolverlo?

Abilita mod_rewrite e .htaccess tramite httpd.conf e poi inserisci questo codice nel tuo .htaccess nella directory DOCUMENT_ROOT :

 Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / RewriteRule ^alternative-url-web2(/.*|)$ /web2$1 [L,NC] 

Codice alternativo:

 RewriteRule ^alternative-url-web2/?$ /web2/ [L,NC] RewriteRule ^alternative-url-web2/(.+)$ /web2/$1 [L,NC] 

Questa è una riscrittura piuttosto semplice. Nel file htaccess nella root del documento, basta aggiungere quanto segue:

 RewriteEngine On RewriteRule ^alternative-url-web2/?(.*)$ /web2/$1 [L] 

A differenza di un reindirizzamento, che fa sì che il browser / client invii una nuova richiesta per un nuovo URL (modificando quindi ciò che si trova nella barra degli indirizzi del browser), una riscrittura avviene interamente dal lato del server.