Vraag Omleidings-URL binnen Apache VirtualHost?


Ik heb een dedicated server met Apache, waarop ik wat VirtualHosts heb opgezet. Ik heb er een opgezet om zowel het www-domein als het niet-www-domein te behandelen.

Mijn VH .conf-bestand voor de www:

<VirtualHost *>
  DocumentRoot /var/www/site
  ServerName www.example.com
  <Directory "/var/www/site">
    allow from all
  </Directory>
</VirtualHost>

Hiermee .htaccess:

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

Is er een eenvoudige manier om het www om te leiden naar de niet-www-versie? Momenteel stuur ik beide versies naar hetzelfde DocumentRoot en gebruiken .htaccess maar ik weet zeker dat ik het moet kunnen doen in het bestand VirtualHost.


56
2018-03-08 20:56


oorsprong


stackoverflow.com/questions/42500012/... - rajeev


antwoorden:


Blijkt mod_rewrite regels zijn prima in het bestand VirtualHosts, afgezien van de RewriteBase regel. Ik eindigde hiermee:

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

EDIT: op advies van joschi in de commentaren, gebruik ik nu deze vereenvoudigde versie met behulp van de Redirect richtlijn van mod_alias:

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

101
2018-03-08 21:34



U hebt hiervoor geen mod_rewrite nodig. Gebruik in plaats hiervan mod_alias en de instructie RedirectPermanent. - joschi
@joschi: Wat zou daar het voordeel van zijn? Is het sneller? - DisgruntledGoat
Je hebt geen volledige herschrijfengine nodig met al zijn controles en mogelijkheden om de klant gewoon door te sturen. Het zou (marginaal) sneller zijn, omdat modalias niet zo ingewikkeld is als mod_rewrite en je maar één richtlijn (RedirectPermanent) nodig hebt in plaats van twee met mod_rewrite. En last but not least, IMHO is het gemakkelijker om te begrijpen wat er in de configuratie gebeurt wanneer iemand er de eerste keer naar kijkt. - joschi
Om een ​​of andere vreemde reden heeft Redirect 301 .. voor ons niet gewerkt. We moesten de RewriteRule-optie gebruiken. - so_mv
OPMERKING: PHP 5.3.0 gebruiken op WAMPSERVER 2.0 op Windows Server 2008 R2 Enterprise, niet inbegrepen :80 na VirtualHost * oorzaken alles om "Verboden" te retourneren! - Cees Timmerman


Wees voorzichtig met 301-omleidingen, omdat een browser die de 301-omleiding ontvangt, deze standaard opslaat, wat inhoudt dat u de controle over wat die browser zal zien wanneer deze probeert toegang te krijgen tot het domein, opgeeft. www.example.com.

Zie bijvoorbeeld deze discussie http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/

Zorg er dus voor dat het niet in de cache wordt gezet, of gebruik mod_proxy (ik raad de mod_proxy aan).

Als u het goed vindt om de gebruiker de URL te laten wijzigen in de adresbalk van de browser, gebruikt u mod_rewrite:

<VirtualHost *>
 ServerName www.example.com
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www.example.com
 RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301,E=nocache:1]
## Set the response header if the "nocache" environment variable is set
## in the RewriteRule above.
 Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache
## Set Expires too ...
 Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</VirtualHost>

Als u wilt dat de "omleiding" onzichtbaar is voor de gebruiker, gebruik dan mod_proxy:

<VirtualHost *>
 ServerName www.example.com
 ProxyRequests Off
 <Proxy *>
 Order Deny,Allow
 Deny from all
 Allow from 203.0.113.67
 </Proxy>
 ProxyPass / http://example.com/
 ProxyPassReverse / http://example.com/
</VirtualHost>

Opgemerkt moet worden dat mod_proxy, indien slecht geconfigureerd, uw netwerk kan schaden.


3
2018-01-18 11:29



Het punt van een 301 is dat het een is blijvend redirect; als je een niet-permanente omleiding wilt, moet je in plaats daarvan 302 of 307 gebruiken. - nickgrim


Je kan toevoegen ServerAlias example.com naar de VirtualHost maar de prestaties zullen verschillen van een omleiding.

Bewerk

Omdat je wilt omleiden en je geen geavanceerde functionaliteit nodig hebt, lijkt het alsof je het gebruikt Redirect zou voor u voldoende moeten zijn. Je zou de Redirect onder een VirtualHost-richtlijn.

Een client-side oplossing zou zijn om een meta refresh label.


2
2018-03-08 21:00



Kan je een beetje verder uitleggen? Hoe zou ik omleiden www.example.com naar example.com deze methode gebruiken? - DisgruntledGoat
In je primaire vhost heb je vermeldingen voor beide ServerName en ServerAlias. De ene heeft example.com en de andere www.example.com. Beide dns-items hebben dan toegang tot de documenten die in dezelfde vhost zijn opgegeven. - Warner
Ik wil een doen redirect hoewel, niet alleen een alias. - DisgruntledGoat
Dan kan de aanbeveling van joshchi een goede benadering voor je zijn. Het lijkt erop dat haren op dit punt worden gespleten. - Warner


nou, je zou een virtuele host voor de SERVERNAME www.example.com kunnen maken en deze omleiden naar een andere virtuele host met de servername example.com


1
2018-03-08 21:18