HTTP URL novirzīšana ar SonicWALL ugunsmūri

Es esmu jauns tīmekļa pārzinis. Es plānoju mitināt savu vietni īpašā serverī. Vietnei ir trīs TLD: .com, .ma un .fr.

Manā grāmatā ir pāris pārrakstīšanas direktīvas .htaccess failu, kas piespiež URL formātu http://example.com ar šo kodu:

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

Plus citi noteikumi. Es vēlos ievietot dažus no šiem noteikumiem, it īpaši URL formātu httpd.conf failu, bet es nezinu, ko rakstīt ServerName un ServerAlias tā kā man ir trīs ServerNames: example.com, example.ma un example.fr. Plus, ja lietotājs izlaiž www vai pievienojiet to, tad tas ir jauns servera nosaukums. Kā es varu iestatīt šos noteikumus? httpd.conf un ar kādu ServerName?

  • Iespējams, ka jums pašlaik nav darba vietnes ar 3 dažādiem domēniem? (Vai arī tas pašlaik nav paslēpts a dalīts serveris?) "formāts uz http://example.com"- stingri sakot, šis kods vienkārši noņem www apakšdomēns (ja tāds ir) neatkarīgi no pieprasītā domēna (bet es domāju, ka jūs to zināt), tas netiek novirzīts uz http://example.com kā jūs, šķiet, domājat savā aprakstā. Vai šie 3 domēni apkalpo tieši to pašu saturu, vai katram domēnam ir kāda pielāgošana (ti, lokalizācija)?
  • @MrWhite, man vēl nav darba vietnes, kods nenoņem www, tas novirza uz vietni bez https un www, jo es izmantoju karodziņu R = 301, kas nozīmē novirzīšanu ar kodu 301, un es kalpoju tāpat saturu bez pielāgošanas katram domēnam
  • Es vienmēr iesaku izmantot .Htaccess failu parastai pārrakstīšanai un bloķēšanai. Iemesls ir vienkāršs. Ja kārtulas ir jūsu failā httpd.conf un ir kļūda, Apache nesāks negatīvi ietekmēt visas vietnes. Tomēr, ja izmantojat .Htaccess un pieļaujat kļūdu, tiek veikta tikai viena vietne. Principā Apache konfigurācijas faili ir jāiestata vienreiz un pēc iespējas jāatstāj vieni. Saglabājiet rediģēšanu mazāk riskantām vietām. Priekā!!
  • Atvainojiet, es gribēju teikt, ka jūsu apraksts, šķiet, nozīmē, ka jūs kanonizējat resursdatora nosaukumu (uz example.com), bet tas tiešām vienkārši noņem www apakšdomēnu no jebkura domēna, kuram piekļūstat (un jā, noņem arī HTTPS). (Malā: Bet kāpēc jūs mēģināt novirzīt no HTTPS uz HTTP?)

Tikai, lai precizētu lietošanu ... jums var būt tikai viens ServerName direktīvu. Ja jums ir vairāk nekā viens, jaunākā direktīva vienkārši ignorē iepriekšējo. Tomēr jums var būt daudz ServerAlias direktīvām. Pieprasītā domēna vārda (ti, jūs pieprasāt www.example.ma un serveris spēj to saskaņot) nav īsti svarīgi, vai www.example.ma ir definēts kā ServerName vai a ServerAlias - serveris to atradīs tāpat.

The ServerName nosaka ne tikai resursdatora nosaukumu, bet arī shēmu un porta numuru. Tā kā, ServerAlias definē tikai resursdatora nosaukumu. Tā kā jūsu gadījumā visi šie domēni, šķiet, izmanto vienu un to pašu shēmu un portu, tas nav īsti svarīgi. (Ja jums būtu dažādas shēmas un porti, jūs jebkurā gadījumā definētu atsevišķus VitualHosts, un katram no tiem būtu savs ServerName - jūs joprojām to varētu izdarīt.)

Tiek piegādāta vērtība ServerName var izmantot arī, lai izveidotu pašreferenciālus novirzīšanas URL. Tomēr tā nav noklusējuma darbība (jums tas būtu skaidri jāiestata UseCanonicalName On). Un, ja jums ir vairāki domēni, tad droši vien vēlaties to atstāt kā noklusējumu. Pēc noklusējuma tas izmantos pieprasījuma resursdatora nosaukumu (ti. HTTP_HOST).

Malā: Es pieņemu, ka visi šie trīs domēni norāda uz to pašu failu sistēmas apgabalu, palaiž tos pašus skriptus un koplieto žurnālfailus? Viena servera konfigurācija vai VirtualHost. Pretējā gadījumā jūs varētu apsvērt atsevišķus VirtualHosts katram domēnam.

Tātad, visu to pateicis, iespējams, nav īsti svarīgi, kuru domēnu iestatījāt kā ServerName un kurus domēnus jūs iestatījāt ServerAlias. Tomēr jums ir jāizvēlas viens resursdators kā ServerName. Man tas būtu loģiski example.com (gTLD un no-www). CcTLD domēni kopā ar www variantiem tiktu definēti kā ServerAlias.

Piemēram:

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

Mod_rewrite novirzīšana darbosies nemainīta vai nu VirtualHost vai .htaccess kontekstā.


Tomēr neliela atkāpe ...

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

... kāpēc jūs novirzāt no HTTPS uz HTTP ?! Ja kaut kas, tam vajadzētu būt otrādi. 2017. gadā nav laba iemesla novirzīt no HTTPS uz HTTP. Lai tas pat "darbotos", SSL sertifikāti tomēr ir jāinstalē!


ATJAUNINĀT:

es vēlos novirzīt tikai uz vienu domēnu, tāpēc SEO to neuzskatīs par dublikātu

Tomēr, ja vēlaties kanonizēt domēna vārdu un visu novirzīt uz example.com tā vietā jūs to darītu nedaudz savādāk nekā iepriekš. Jūsu pašreizējais mod_rewrite kods to nedara.

Tā vietā jūs definētu divus konteineri, viens jūsu kanoniskajam domēnam un viens visiem pārējiem. Pēc tam izmantojiet vienkāršu mod_alias Redirect uz jūsu kanonisko domēnu (nevis mod_rewrite).

Piemēram:

 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 : 
  • Paldies @MrWhite par detalizētu atbildi, es to ļoti novērtēju, jūsu VirtualHost kods ar dažādiem ServerAlias ​​atbildēja uz manu jautājumu, tomēr jūs teicāt, ka domājat, ka vēlos kanonizēt saimniekdatora nosaukumu, un jautājat, kāpēc es novirzīšu uz https, tas ir SEO dēļ, jo 3 domēni norāda uz to pašu saturu, es vēlos novirzīt tikai uz vienu domēnu, tāpēc SEO to neuzskatīs par dublikātu, mana vietne neatbalsta ssl, tādēļ, ja kāds raksta example.com, es vēlos tos novirzīt uz noklusējuma domēnu bez http, vai es to daru pareizi?
  • "jautāja par to, kāpēc es novirzītu uz https" - es jautāju, kāpēc jūs novirzītu uz HTTP (nevis HTTPS). Ja jūsu vietne neatbalsta ssl, jūs tik un tā nevarēsit novirzīt uz HTTP, jo lietotāji saņems pārlūkprogrammas kļūdu pirms sasniedzot pieteikuma kodu. "Es vēlos novirzīt tikai uz vienu domēnu, tāpēc SEO to neuzskatīs par dublikātu" - labi, bet tas nav tas, ko jūsu kods pašlaik dara. Ja kanonizējat domēna vārdu (visu novirzot uz example.com), tad jūs, iespējams, savējos VirtualHosts / novirzīsit citādi uz iepriekš minēto.
  • Esmu atjauninājis savu atbildi attiecībā uz domēna kanonizēšanu (kā jūs minējāt iepriekšējā komentārā).
  • Paldies @MrWhite par atbildi, ka tā lieliski atbildēja uz manu jautājumu, es nedomāju būt kaitinoša, bet kam domāta direktīva UseCanonicalName?
  • Ja Jums ir UseCanonicalName On (nav noklusējums), tad SERVER_NAME servera mainīgais attiecas uz ServerName direktīvu. Apache izmanto SERVER_NAME lai izveidotu absolūtos URL (kad tas nepieciešams). Tomēr pēc noklusējuma SERVER_NAME ir tas pats, kas HTTP_HOST, kas attiecas uz visu saimnieks lietotājs ir norādījis pieprasījumā.

strādāja par jums: Charles Robertson | Vēlies ar mums sazināties?