Niet-www omleiden naar www in .htaccess

Ik heb dit in mijn .htaccess-bestand:

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

maar telkens wanneer ik een bestand in mijn hoofdmap open, zoals http://example.com/robots.txt, wordt het omgeleid naar http://www.example.comrobots.txt/.

Hoe kan ik dit corrigeren zodat het correct wordt omgeleid naar http://www.example.com/robots.txt?


Antwoord 1, autoriteit 100%

Wijzig uw configuratie hierin (voeg een schuine streep toe):

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

Of de onderstaande oplossing (voorgesteld door @absiddiqueLive) werkt voor elk domein:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Als je http en https wilt ondersteunen en de protocolkeuze wilt behouden, probeer dan het volgende:

RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]

Waar je loginvervangt door checkout.phpof welke URL je ook nodig hebt om HTTPS te ondersteunen.

Ik zou echter beweren dat dit een slecht idee is. Voor de redenering lees dit antwoord.


Antwoord 2, autoriteit 25%

Hier is de juiste oplossing die https en http ondersteunt:

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

UPD.: voor domeinen zoals .co.uk, vervang

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$

met

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+\.[^.]+$

Antwoord 3, Autoriteit 21%

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

https

RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]

Antwoord 4, Autoriteit 6%

In het volgende voorbeeld werkt op zowel SSL en niet-ssl en is veel sneller als je gewoon een regel gebruiken voor het beheren http en https

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

[Geteste]

Dit zal redirect

http

Naar

https

Naar


Antwoord 5, Autoriteit 2%

Probeer deze, gebruikte ik het op vele websites, het werkt perfect

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1  [QSA,L,R=301]

Antwoord 6

Ik heb alle bovenstaande oplossingen getest, maar werkt niet voor mij, ik heb geprobeerd het verwijderen van de http: // en zal niet redirect ook verwijderde de www te buigen goed, dus ik in de war raken, speciaal Ik stel al mijn plaatsen onder https: //

Dus ik heb wat codes gecombineerd en kwam met een perfecte oplossing voor zowel http:// en https:// en www en niet-www.

# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

Ik hoop dat dit iemand kan helpen 🙂


Antwoord 7

Voeg de volgende code toe aan het .htaccess-bestand.

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

Tutorial voor het omleiden van URL’s is hier te vinden – Redirect niet-www naar www & HTTP naar HTTPS met .htaccess-bestand


Antwoord 8

Deze configuratie werkte voor mij in bitnami wordpress met SSL geconfigureerd :

Het onderstaande toegevoegd onder “RewriteEngine On” in bestand /opt/bitnami/apps/wordpress/conf/httpd-app.conf

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Antwoord 9

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

Hiermee wordt uw domein omgeleid dat niet is begonnen met WWW
Het is niet uw hele subdomein omleiden.

Het is handig.


Antwoord 10

Ik geloof dat het beste antwoord niet-www met succes omleidt naar www (bijvoorbeeld: mysite.com -> www.mysite.com), maar geen rekening houdt met subdomeinen met jokertekens, wat resulteert in in:

random.mysite.com -> www.random.mysite.com

Hier is een oplossing met/zonder HTTPS

HTTP

RewriteEngine On
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ http%{ENV:protossl}://www.mysite.com/$1 [L,R=301] 

HTTP/HTTPS

RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/$1 [L,R=301]

*opmerking: ik heb https niet getest omdat ik momenteel geen certificaat heb om te testen, maar als iemand kan verifiëren of optimaliseren wat ik heb, zou dat geweldig zijn.


Antwoord 11

Twee waarschuwingen

Vermijd 301 en geef de voorkeur aan moderne 303 of 307 antwoordstatuscodes.

Vermijd 301

Denk goed na of u de permanente omleiding die wordt aangegeven als [R=301]echt nodig heeft, want als u besluit deze later te wijzigen, blijven de vorige bezoekers van de pagina de pagina van de originele omleiding.

De permanente omleidingsinformatie wordt vaak opgeslagen in de cache van de browser en is over het algemeen moeilijk te verwijderen (de pagina opnieuw laden lost het probleem niet op). Uw websitebezoekers zullen “voor altijd” in de vorige omleiding blijven steken.

Vermijd ook 302

De nieuwe versie van het HTTP-protocol (v1.1) heeft twee nieuwe responsstatuscodes toegevoegd die kunnen worden gebruikt in plaats van 302.

  • 303URL-omleiding maar veeleisend om het type verzoek te wijzigen in
    KRIJGEN.
  • 307URL-omleiding maar veeleisend om het type verzoek te behouden zoals oorspronkelijk verzonden.

Je kunt nog steeds de code 302(niet-permanente omleiding) gebruiken, hoewel dit als dubbelzinnig wordt beschouwd. In ieder geval implementeren de meeste browsers 302op dezelfde manier als de nieuwe 303-code aangeeft.


Antwoord 12

Voeg dit indien mogelijk toe aan het hoofdconfiguratiebestand van Apache. Het is een lichtere oplossing, waarvoor minder verwerking nodig is.

<VirtualHost 64.65.66.67>
        ServerName example.com
        Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
   ServerAdmin [email protected]
   ServerName www.example.com
   DocumentRoot /var/www/example
   .
   .
   . etc

Dus, de aparte VirtualHostvoor “example.com” legt die verzoeken vast en leidt ze vervolgens permanent door naar je hoofd VirtualHost. Er is dus geen REGEX-parsing bij elk verzoek, en uw clientbrowsers slaan de omleiding in de cache op, zodat ze nooit (of zelden) de “verkeerde” url opnieuw zullen opvragen, wat u bespaart op de serverbelasting.

Let op, de afsluitende slash in Redirect permanent / http://www.example.com/.
Zonder dit zou een omleiding van example.com/asdfomleiden naar http://www.example.comasdfin plaats van http://www.example.com/asdf.


Antwoord 13

Schrijf in .htaccess 🙂

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Other episodes