HTTP URL-omdirigering med en SonicWALL-firewall

Jeg er ny webmaster. Jeg planlægger at være vært for mit websted på en dedikeret server. Webstedet har tre TLD: .com, .ma og .fr.

Jeg har et par omskrivningsdirektiver i min .htaccess fil, der tvinger URL-formatet til http://example.com med denne kode:

RewriteCond %{HTTP_HOST} !^$ RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR] RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^(www\.)?(.+) RewriteRule ^ http://%2%{REQUEST_URI} [R=301,L] 

Plus andre regler. Jeg vil placere nogle af disse regler, især URL-formatet i httpd.conf fil, men jeg ved ikke, hvad jeg skal skrive i ServerName og ServerAlias da jeg har tre servernavne: example.com, example.ma og example.fr. Plus hvis en bruger udelader www eller tilføj det, så er det et nyt servernavn. Hvordan kan jeg indstille disse regler i httpd.conf og under hvilken servernavn?

  • Formentlig har du ikke i øjeblikket et arbejdssted med 3 forskellige domæner? (Eller er det i øjeblikket skjult for syn på en delt server?) "format til http://example.com"- strengt taget fjerner denne kode bare www underdomæne (hvis det findes) uanset hvilket domæne der anmodes om (men jeg forventer, at du ved det), omdirigerer det ikke til http://example.com som du synes at antyde i din beskrivelse. Serverer disse 3 domæner nøjagtigt det samme indhold, eller er der en eller anden tilpasning (dvs. lokalisering) for hvert domæne?
  • @MrWhite, jeg har endnu ikke et fungerende websted, koden fjerner ikke www, den omdirigerer til hjemmesiden uden https og www, fordi jeg bruger flag R = 301, hvilket betyder omdirigering med kode 301, og jeg serverer det samme indhold uden nogen tilpasning for hvert domæne
  • Jeg anbefaler altid at bruge .Htaccess-filen til almindelig omskrivning og blokering. Årsagen er enkel. Hvis reglerne ligger inden for din httpd.conf-fil, og der er en fejl, begynder Apache ikke at påvirke alle siderne negativt. Men hvis du bruger .Htaccess og laver en fejl, udføres kun et websted. I princippet skal du konfigurere dine Apache-konfigurationsfiler en gang og lade dem være i fred så meget som muligt. Gem redigering til mindre risikable områder. Skål !!
  • Undskyld, hvad jeg mente var, at din beskrivelse synes at antyde, at du kanoniserer værtsnavnet (til example.com), men det fjerner faktisk bare www-underdomænet uanset hvilket domæne der er adgang til (og ja, fjerner også HTTPS). (Bortset fra: Men hvorfor prøver du at omdirigere fra HTTPS til HTTP?)

Bare for at afklare brugen ... du kan kun have en ServerName direktiv. Hvis du har mere end en, tilsidesætter det senere direktiv simpelthen det tidligere. Du kan dog have mange ServerAlias direktiver. Med hensyn til løsning af det anmodede domænenavn (dvs. du beder om www.example.ma og serveren er i stand til at matche dette) betyder det ikke rigtig noget om www.example.ma er defineret som ServerName eller a ServerAlias - serveren finder det lige det samme.

Det ServerName definerer ikke bare værtsnavnet, det kan også definere skema og portnummer. Der henviser til, ServerAlias definerer kun et værtsnavn. Da i disse tilfælde alle disse domæner ser ud til at bruge den samme ordning og port, betyder det ikke rigtig noget. (Hvis du havde forskellige ordninger og porte, ville du alligevel definere separate VitualHosts, og hver ville have sin egen ServerName - du kunne stadig gøre dette.)

Værdien leveret til ServerName kan også bruges til at konstruere URL-adresser til omdirigering af selvreferencer. Dette er dog ikke standardadfærden (du bliver nødt til at indstille det eksplicit UseCanonicalName On). Og hvis du har flere domæner, vil du sandsynligvis bare lade det være som standard. Standard er, at det bruger værtsnavnet fra anmodningen (dvs. HTTP_HOST).

Bortset fra: Jeg antager, at disse tre domæner alle peger på det samme område af filsystemet, kører de samme scripts og deler logfiler? En enkelt serverkonfiguration eller VirtualHost. Ellers kan du overveje separate VirtualHosts for hvert domæne.

Så når det er sagt, betyder det sandsynligvis ikke rigtig noget, hvilket domæne du angiver som ServerName og hvilke domæner du angiver som ServerAlias. Du skal dog vælge en vært som ServerName. For mig ville den logiske være example.com (gTLD og no-www). CcTLD-domænerne sammen med www-varianterne vil blive defineret som ServerAlias.

For eksempel:

 ServerName example.com ServerAlias www.example.com ServerAlias example.ma www.example.ma ServerAlias example.fr www.example.fr UseCanonicalName Off : 

Din mod_rewrite-omdirigering fungerer uændret i enten VirtualHost eller .htaccess sammenhæng.


Imidlertid let afvigelse ...

RewriteCond %{HTTPS} on : RewriteRule ^ http://%2%{REQUEST_URI} [R=301,L] 

... hvorfor omdirigerer du fra HTTPS til HTTP ?! Hvis det skulle være noget omvendt. Der er ingen god grund til at omdirigere fra HTTPS til HTTP i 2017. For at dette til og med "fungerer" skal SSL-certifikaterne alligevel installeres!


OPDATERING:

Jeg vil kun omdirigere til et domæne, så det ikke betragtes som duplikat af SEO

Men hvis du ønsker at kanonisere domænenavnet og omdirigere alt til example.com i stedet for ville du gøre dette lidt anderledes end ovenstående. Din nuværende mod_rewrite-kode gør ikke dette.

I stedet for ville du definere to containere, en til dit kanoniske domæne og en til alle de andre. Brug derefter et simpelt mod_alias Redirect til dit kanoniske domæne (ikke mod_rewrite).

For eksempel:

 ServerName www.example.com ServerAlias example.ma www.example.ma ServerAlias example.fr www.example.fr # Redirect everything to the canonical domain Redirect / http://example.com/ :  ServerName example.com UseCanonicalName On : 
  • Tak @ MrWhite for dit detaljerede svar, jeg sætter stor pris på det, din kode for VirtualHost med forskellige ServerAlias ​​besvarede mit spørgsmål, men du sagde, at du troede, jeg ville kanonisere værtsnavnet og spurgte om, hvorfor jeg ville omdirigere til https, det er på grund af SEO, fordi de 3 domæner peger på det samme indhold, vil jeg kun omdirigere til et domæne, så det ikke betragtes som duplikat af SEO, min hjemmeside understøtter ikke ssl, så hvis nogen skriver eksempel.com vil jeg at de omdirigeres til standarddomænet uden http, gør jeg det på den rigtige måde?
  • "spurgte om hvorfor jeg ville omdirigere til https" - Jeg spurgte om hvorfor du ville omdirigere til HTTP (ikke HTTPS). Hvis dit "websted ikke understøtter ssl", kan du alligevel ikke omdirigere til HTTP, da brugerne får en browserfejl Før når din applikationskode. "Jeg vil kun omdirigere til et domæne, så det ikke betragtes som duplikat af SEO" - ok, men det er ikke det, din kode i øjeblikket gør. Hvis du kanonikerer domænenavnet (omdirigerer alt til example.com) så ville du sandsynligvis konstruere dine VirtualHosts / omdirigere anderledes end ovenstående.
  • Jeg har opdateret mit svar med hensyn til kanonisering af domænet (som du nævnte i ovenstående kommentar).
  • Tak @ MrWhite for dit svar, det svarede perfekt på mit spørgsmål, jeg mener ikke at være irriterende, men hvad UseCanonicalName-direktivet er beregnet til?
  • Hvis du har UseCanonicalName On (ikke standard), derefter SERVER_NAME servervariabel henviser til værdien af ServerName direktiv. Apache bruger SERVER_NAME at konstruere absolutte URL'er (når det er nødvendigt). Dog som standard SERVER_NAME er det samme som HTTP_HOST, der henviser til hvad som helst vært brugeren har specificeret i anmodningen.

arbejdet for dig: Charles Robertson | Ønsker du at kontakte os?