it-swarm.it

Come posso implementare la riscrittura degli URL nel mio file .htaccess?

Mi piacerebbe fare un po 'di riscrittura degli URL (Perché? Vedi questa domanda .) In modo che invece di vedere gli indirizzi come gli utenti

labouseur.com/course-compilers.html 

possono invece vedere e usare semplicemente

labouseur.com/course-compilers

(Ancora meglio, forse dovrei ristrutturarlo in modo che si tratti di corsi/compilatori.)

Sto usando un servizio di hosting condiviso basato su Linux per il mio sito Web, quindi non ho il controllo amministrativo del server, ma ho il controllo su .htaccess. I riferimenti che ho letto online mi sono sembrati poco chiari, quindi sto cercando un po 'di chiarezza e consigli qui.

17
Alan

Potresti effettivamente rimuovere .html dai file sul tuo server e configurare le impostazioni in htaccess in modo che vengano servite come file html, ma probabilmente non è quello che stai cercando.

Fai questo :

RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ $1.html
13
Rizwan Kassim

Innanzitutto, assicurati che Apache abbia il modulo e che sia consentito nei file .htacces, quindi aggiungi:

RewriteEngine on

# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/$1 

Il tuo esempio richiederebbe

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /$1.html

Per una struttura di directory a livello singolo e

RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /$1.html

Per una struttura multilivello.

Ma fai attenzione

Se hai la struttura

/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess

Le regole di riscrittura nei file secondari .htaccess saranno relative alla loro cartella principale e puoi entrare in alcune situazioni di ciclo di riscrittura disordinate. Assicurati di usare RewriteCond per impedire che accadano, se puoi!

3
Aiden Bell

Oltre alle risposte sopra si possono usare

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ $1.html [L]

([\w-]+) Consente lettere, cifre con un trattino (-).

(.*) riscriverà ogni richiesta a prescindere, il che potrebbe impotente altre seguenti regole causando errori interni del server all'accesso.

2
Abhishek Gurjar

Non è necessario utilizzare un file .htaccess per ottenere questo risultato. Basta strutturare i file in directory e invece di utilizzare "labouseur.com/course-compilers.html", basta dare un nome al file index.html e inserirlo in una directory chiamata "course-compilers". Quindi quando si punta a quella directory, l'indice viene offerto per impostazione predefinita ma non verrà visualizzato nell'URL. Quindi potresti semplicemente scrivere i tuoi link come "labourseur.com/course-compilers" e tutto andrà bene.

Nessun accesso richiesto.

1
Joel Glovier