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:

  • Generare il certificato SSL autenticato per apache
  • Qual è la differenza tra DocumentRoot e Directory in apache2 per mac os x
  • Reindirizzare, modificare gli URL o redirect HTTP a HTTPS in Apache - Tutto quello che hai sempre cercato di sapere sulle regole di Mod_Rewrite ma avevo paura di chiedere
  • Come faccio a dire ad Apache quale PHP utilizzare?
  • IP inondazioni nonostante mod_evasive?
  • Apache - stesso username in diversi file .htpasswd
  • Redirect permanent /index.html / 

    è sbagliato (ciclo infinito).

    Una soluzione migliore? Sembra sorprendentemente difficile.

  • Due latenze delle tabs di networking
  • La regola RewriteBase funziona in .htacess, ma non in httpd.conf (dentro <Directory ...>)?
  • Consigli per il debug di Apache con errori di segmentazione PHP
  • Tracciamento degli errori "Reset di connessione" in Linux
  • Prestazione Sintonizzazione di un Apache High-Load Server
  • Dovrebbe un virtualhost utilizzare sempre il dominio nudo come ServerName?
  • 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.