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:

  • Wildcard DNS, VirtualHost su apache2, 404 per sottodomini inutilizzati
  • Come registrare lo schema URL (http / https) in Apache?
  • Come eseguire il debug di timeouts apache?
  • Domanda di sicurezza sull'impostazione di httpd.conf AllowOverride
  • Come redirect non-www a www senza codifica utilizzando .htaccess?
  • Generare .key e .crt dal file PKCS12?
  • Redirect permanent /index.html / 

    è sbagliato (ciclo infinito).

    Una soluzione migliore? Sembra sorprendentemente difficile.

  • Strani cose nel log apache
  • Che cos'è un pannello di patch?
  • Apache2 server che utilizza un sacco di CPU
  • Corretto l'indirizzamento IP di networking se i tuoi utenti hanno la capacità di VPN
  • Perché alcuni collegamenti vanno fuori e altri vengono rifiutati?
  • Evitare l'avvio di Apache dopo l'installazione di apt-get
  • 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.