.htaccess riscrive per redirect l’URL di root alla sottodirectory

Provare a ottenere

www.example.com 

andare direttamente a

 www.example.com/store 

Ho provato più bit di codice e nessuno funziona.

Quello che ho provato:

 Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com$ RewriteRule (.*) http://www.example.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$ RewriteRule ^/(.*)$ /samle/%1/$1 [L] 

Che cosa sto facendo di sbagliato?

Puoi usare una regola di riscrittura che usa ^ $ per rappresentare la radice e riscriverla nella tua directory / store, in questo modo:

 RewriteEngine On RewriteRule ^$ /store [L] 

Sono rimasto sorpreso dal fatto che nessuno abbia menzionato questo:

 RedirectMatch ^/$ /store/ 

Fondamentalmente, reindirizza la root e solo l’URL di root. La risposta è nata da questo link

Prova questo:

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

Se desideri un reindirizzamento esterno (che induca il browser in visita a mostrare l’URL reindirizzato), imposta anche qui il flag R :

 RewriteRule ^$ /store [L,R=301] 

Ecco cosa ho usato per redirect a una sottodirectory. Questo lo ha fatto in modo invisibile e consente ancora attraverso richieste che corrispondono a un file esistente o altro.

 RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?site.com$ RewriteCond %{REQUEST_URI} !^/subdir/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /subdir/$1 RewriteCond %{HTTP_HOST} ^(www.)?site.com$ RewriteRule ^(/)?$ subdir/index.php [L] 

Sostituisci site.com e sottodirai con i tuoi valori.

Un’altra alternativa se desideri riscrivere l’URL e hide l’URL originale:

 RewriteEngine on RewriteRule ^(.*)$ /store/$1 [L] 

Con questo, se per esempio digiti http://www.example.com/product.php?id=4 , aprirà il file in modo trasparente all’indirizzo http://www.example.com/store/product.php?id=4 ma senza mostrare all’utente l’url completo.

Per impostare un reindirizzamento invisibile da root a sottocartella, puoi utilizzare il seguente RewriteRule in /root/.htaccess:

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

La regola sopra reindirizzerà internamente il browser da:

a

E

a

mentre il browser rimarrà nella cartella principale.

Questa sembrava la soluzione più semplice:

 RewriteEngine on RewriteCond %{REQUEST_URI} ^/$ RewriteRule (.*) http://www.example.com/store [R=301,L] 

Stavo ricevendo loop di reindirizzamento con alcune delle altre soluzioni.

Non capisco la tua domanda …

Se desideri redirect ogni richiesta a una sottocartella:

 RewriteRule ^(.*)$ shop/$1 [L,QSA] http://www.example.com/* -> wwwroot/store/* 

Se si desidera redirect a una sottocartella che ha il nome di dominio

 RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$ RewriteRule ^(.*)$ %1/$1 [L,QSA] http://www.example.com/* -> wwwroot/example.com/* 

Ho scoperto che per evitare il reindirizzamento circolare, è importante limitare l’ambito del reindirizzamento alla directory principale. Avrei usato:

 RewriteEngine on RewriteCond %{REQUEST_URI} ^/$ RewriteRule (.*) http://www.example.com/store [R=301,L] 

La maggior parte delle soluzioni di cui sopra sono corrette ma mancano tutte la trasparenza del reindirizzamento.

Nel mio caso, quando visitavo http://www.example.com, volevo essere reindirizzato alla sottodirectory / negozio ma senza aggiornare l’URL su http://www.example.com/store . (Tutto quello che voglio è ottenere il codice della pagina da quella directory). Se questo è il tuo caso, la soluzione qui sotto funziona perfettamente.

 RewriteEngine on RewriteCond %{HTTP_HOST} example\.com [NC] RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^(.*)$ /store/$1 [L] 

fonte: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory

Precedentemente utilizzo il seguente codice, che funziona correttamente, per redirect l’URL di root di ciascuno dei miei domini / sottodomini alle rispettive sottodirectory di corrispondenza che sono identificate esattamente come il sottodominio / dominio come di seguito:

 RewriteCond %{HTTP_HOST} ^sub1.domain1.com RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] RewriteCond %{HTTP_HOST} ^sub2.domain1.com RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] RewriteCond %{HTTP_HOST} ^sub1.domain2.com RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] RewriteCond %{HTTP_HOST} ^sub2.domain2.com RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] 

Tuttavia, quando voglio aggiungere altri sottosistemi o domini, sarà necessario aggiungerlo nel codice precedente. Dovrebbe essere molto più conveniente per semplificare il funzionamento come jolly (*) come di seguito:

 RewriteCond %{HTTP_HOST} ^sub RewriteCond %{REQUEST_URI} !/subs/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] 

Quindi, ogni volta che vengono aggiunti altri sottodomini / domini purché il nome del sottodominio abbia un prefisso secondario (come: sub3.dominio1.com, sub1.dominio3.com ecc.) Il codice rimarrà valido.

Si può usare anche Redirect per questo scopo

 Redirect 301 / www.example.com/store 

O Alias per la mapping

 Alias / /store 

Modifica: mod_alias è applicabile solo in httpd.conf.

refrences

Penso che i principali problemi con il codice che hai postato siano:

  • la prima riga corrisponde a un host che inizia con rigorosamente sample.com, quindi http://www.sample.com non corrisponde.

  • la seconda riga vuole almeno un personaggio, seguito da http://www.sample.com che non corrisponde (perché sei sfuggito alla prima w?)

  • nessuna delle regole incluse reindirizza all’URL che hai specificato nel tuo objective (in più, il campione è errato come samle, ma è irrilevante).

Per riferimento, ecco il codice che hai attualmente:

 Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^sample.com$ RewriteRule (.*) http://www.sample.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$ RewriteRule ^/(.*)$ /samle/%1/$1 [L] 

Un po ‘googling, mi dà questi risultati:

RewriteEngine On
RewriteBase /
RewriteRule ^ index. (. *)? $ http://domain.com/subfolder/ [r = 301]

Ciò reindirizzerà qualsiasi tentativo di accedere a un file denominato index.something nella sottocartella, indipendentemente dal fatto che il file esista o meno.

Oppure prova questo:

RewriteCond% {HTTP_HOST}! ^ http://Www.sample.com $ [NC]
RewriteRule ^ (. *) $% {HTTP_HOST} / samlse / $ 1 [R = 301, L]

Non ho eseguito molti reindirizzamenti nel file .htaccess, quindi non sono sicuro che funzioni.

prova ad usare sotto le righe in htaccess

Nota: potrebbe essere necessario controllare qual è il nome di default.html

default.html è il file che carica per impostazione predefinita nella cartella principale.

RewriteEngine

Redirect /default.html http://example.com/store/

Le possibili soluzioni per ottenere questo sono due modi: 1. Creare un file .htaccess nella cartella principale come sotto (basta sostituire example.com e my_dir con i valori corrispondenti):

  RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?example.com$ RewriteCond %{REQUEST_URI} !^/my_dir/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /my_dir/$1 RewriteCond %{HTTP_HOST} ^(www.)?example.com$ RewriteRule ^(/)?$ my_dir/index.php [L]  
  1. Utilizza RedirectMatch per redirect solo l’URL di root “/” in un’altra cartella o URL,

    RedirectMatch ^ / $ http://www.example.com/my_dir

devi solo aggiungere questo codice nel tuo file .htaccess

  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /folder/index.php [L]  

Risponderò alla domanda originale non indicando un’altra ansible syntax (ci sono molte altre risposte) ma facendo notare qualcosa che ho dovuto affrontare una volta, mi ci è voluto un po ‘per capire:

 What am I doing wrong? 

Esiste la possibilità che% {HTTP_HOST} non venga compilato correttamente, o del tutto. Anche se ho visto solo che si verificano in un solo computer su un host condiviso, con alcuni apache 2.2 con patch personalizzati, è comunque una possibilità.

Questo tenterà la sottodir se il file non esiste nella root. Necessario questo come ho spostato un sito web di base. Html che si aspetta di essere eseguito a livello di root e lo ha spinto a una sottodirectory. Funziona solo se tutti i file sono piatti (non sono possibili trucchi htaccess nella sottodirectory). Utile per cose collegate come file css e js.

 # Internal Redirect to subdir if file is found there. RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s RewriteRule ^(.*)$ /subdir/$1 [L]