Reindirizzamento di http://www.example.com/index.html a http://www.example.com/ (senza loop)

Per ragioni estetiche (preferisco quando esiste una stretta mapping tra URL e pagine), non mi piace il fatto che http://www.example.com/index.html e http: // www. example.com/ produce lo stesso contenuto con due URL diversi. Vorrei avere http://www.example.com/ come quello canonico.

La soluzione evidente:

Redirect permanent /index.html / 

è sbagliato (ciclo infinito).

Una soluzione migliore? Sembra sorprendentemente difficile.

  • Usando nginx e / o vernice per eseguire la cache dei reindirizzamenti 301 generati dal server
  • URL riscrivere in IIS 7
  • Impedire che le regole Rewrite URL siano ereditate da sottodirectory in IIS7
  • Gli URL riscritti con lunghezza di parametro> 255 non funzionano
  • Utilizzo di .local per siti web interni
  • Come eseguire una rimozione di una parte dell'URL senza submit un reindirizzamento?
  • Utilizzando la curl per eseguire una richiesta HEAD con un timeout duro
  • Il mio URL rimarrà segreto se non mi lego mai ad esso?
  • 6 Solutions collect form web for “Reindirizzamento di http://www.example.com/index.html a http://www.example.com/ (senza loop)”

    Prova una RewriteCond da mod_rewrite :

     RewriteEngine On RewriteCond %{QUERY_STRING} !^/$ RewriteRule /index.html / [R] 

    Questo dice se la string di query non è / allora riscrivere /index.html come / (non dovrebbe loop).

    La mia soluzione (che sembra funzionare così l'ho accettata), ispirata alla risposta di PP, è:

     RewriteEngine su
     RewriteCond% {REQUEST_URI} ^ \ / index \ .html $
     RewriteRule. * Http://www.example.com/ [R = 302, L]
    

    Qualsiasi soluzione non-modrore? Ho dovuto triggersre un nuovo module Apache, che cerco di evitare.

    RedirectMatch ^/index.html$ http://www.example.com/

    Perché non impostare DirectoryIndex su qualcos'altro – ad esempio, unpredictable.html e nominare il file di indice in modo simile?

     DirectoryIndex unpredictable.html Redirect permanent /index.html http://yoursite/ 

    Non è necessario esporre mai il valore di DirectoryIndex selezionato.

    Si noti che l'ultimo argomento di Redirect deve essere un URL completo, non solo un frammento di path.

    Una soluzione non mod_rewrite … In realtà joschi quasi lo aveva, ma per alcuni (poco chiari per me) ragione che wherete scavare intorno all'infinito loop:

     RedirectMatch permanent ^/index\.html$ http://www.example.com/ AliasMatch ^/$ /var/www/index.html 
     RewriteEngine on RewriteCond %{REQUEST_URI} ^\/index\.html$ RewriteRule .* http://www.example.com/ [R=302,L] 

    soluzione perfetta

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.