ISAPI Rewrite

Sinds donderdag 11 maart 2010 is ISAPI_Rewrite versie 3 in onze hostingomgeving standaard beschikbaar.

Let op: Op onze Windows Server 2008 webservers is alleen versie 3 geïnstalleerd.

ISAPI_Rewrite versie 3 is compatible met de Apache mod_rewrite syntaxis, waardoor het overzetten van een configuratie van Apache naar IIS zo simpel wordt als het kopieren van het .htaccess-bestand.

U vindt meer informatie in de documentatie van ISAPI Rewrite 3.

Een besturingssyteem als Microsoft Windows staat het niet toe om bestanden op te slaan als deze beginnen met een punt (‘.’). Als u een .htaccess-bestand maakt, maakt u deze dan aan als htaccess.txt. Uploadt het bestand via FTP en gebruik uw FTP-programma om het bestand te hernoemen naar .htaccess.


Gekoppelde domeinen

“Domeinnaamregistratie zonder hosting” (DRZH) domeinen kunt u met de volgende .htaccess-code koppelen aan uw hoofddomein:

# Schakel de RewriteEngine in.
RewriteEngine on
 
# In iedere onderliggende map kan een .htaccess-bestand de configuratie
# overschrijven.
AllowOverride all
 
# Stuur het HTTP-request voor ieder gekoppeld domein door naar het
# hoofddomein. Vervang "mijnhoofddomein" op de eerste en derde regel
# hieronder door de domeinnaam van het hoofddomein.
RewriteCond %{HTTP:Host} ^(?!www.mijnhoofddomeinn.nl).*$ [NC]
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? http://www.mijnhoofddomein.nl%1 [L,R=301]

Een aanroep naar http://www.gekoppelddomein.nl/map/pagina1.html wordt via een 301-HTTP redirect doorgestuurd naar http://mijnhoofddomein.nl/map/pagina1.html.

Of om een gekoppeld domein in een sub-map uit te laten komen zonder redirect:

# Laat een gekoppeld domein uitkomen in een sub-map, met de naam van
# dat domein.
#
# Schakel de RewriteEngine in.
RewriteEngine on
 
# In iedere onderliggende map kan een .htaccess-bestand de configuratie
# overschrijven.
AllowOverride all
 
# Wijzig “gekoppelddomein” in de domeinnaam, op de eerste en derde regel
# hieronder. Wijzig “tld” in de extensie van het domein (nl, com, net, eu).
RewriteCond %{HTTP:Host} ^(?:www.)?gekoppelddomein.tld$
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? /gekoppelddomein%1 [L]


Stuur een HTTP-request door naar HTTPS

# Schakel de RewriteEngine in.
RewriteEngine on
 
# In iedere onderliggende map kan een .htaccess de configuratie overschrijven.
AllowOverride all
 
# Stuur ieder HTTP-request voor een specifieke host door naar HTTPS.
RewriteCond %{HTTP:Host} ^(www.example.com)$ [NC]
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? https://%1%2 [R=302,L]


Subdomeinen

# Schakel de RewriteEngine in.
RewriteEngine on
 
# In iedere onderliggende map kan een .htaccess de configuratie overschrijven.
AllowOverride all
 
# Stuur ieder subdomein door naar een map met dezelfde naam,
# behalve voor het subdomein "www". Er gebeurt niets als er geen subdomein is
# gebruikt. Subdomeinen als "www.foo" worden doorgestuurd naar "/foo" en
# "foo.bar" naar "/foo.bar".
RewriteCond %{HTTP:Host} ^((?!www.)(.+)|(?:www.)(.+)).(example.com)$ [NC]
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? /%2%3%5 [L]


Domein zonder www naar www

# Schakel de RewriteEngine in.
RewriteEngine on
 
# In iedere onderliggende map kan een .htaccess de configuratie overschrijven.
AllowOverride all
 
# Stuur ieder HTTP-request voor een domeinnaam zonder www door naar
# www.domeinnaam.nl.
RewriteCond %{HTTP_HOST} ^(?!www.)(.+)$ [NC]
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? http://www.%1%2 [L,R=301]


Blokkeer alle bezoekers, behalve van bepaalde IP-adressen

# Schakel de RewriteEngine in.
RewriteEngine on
 
# In iedere onderliggende map kan een .htaccess de configuratie overschrijven.
# AllowOverride all
 
# Weiger de toegang voor iedereen, behalve de onderstaande IP-adressen.
# Verander 11.222.33.444 en 555.66.7.888 met de desbetreffende IP-adressen.
#
# Dit .htaccess-bestand kan ook in afzonderlijke submappen gebruikt worden.
RewriteCond %{REMOTE_ADDR} !(11.222.33.444|555.66.7.888)
RewriteRule .* / [F,L]


ISAPI_Rewrite en REQUEST_URI

Standaard beschikt de webserver IIS niet over de server variabele REQUEST_URI. De informatie die deze server variabele bevat is vaak nodig voor het herschrijven van mooie, zoekmachine vriendelijke URLs. Bijvoorbeeld WordPress Permalinks.

Helicon’s ISAPI_Rewrite 2 gaf de mogelijkheid hier in scripts gebruik van te maken met behulp van de server variabele HTTP_X_REWRITE_URL. Deze bevat dezelfde informatie als anders REQUEST_URI zou hebben. Namelijk de volledige URI van een request. In scripts is dit aan elkaar te koppelen met de code:

<?php
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
    $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}
?>

zodat scripts niet verder aangepast hoefden te worden; geef REQUEST_URI één keer de waarde van HTTP_X_REWRITE_URL, zodat het niet tientallen keren gewijzigd hoeft te worden in verschillende stukken code.

Sinds Microsoft een ISAPI-extensie FastCGI beschikbaar heeft gemaakt, beschikt IIS ook standaard over de echte REQUEST_URI server variabele. Bovenstaande code wijziging is hierdoor niet meer mogelijk. In scripts, bijvoorbeeld PHP, kan nu standaard

$_SERVER['REQUEST_URI'];

gebruikt worden.

Op de Vevida Windows Server 2003 webservers draaien ISAPI_Rewrite versie 2 en 3 naast elkaar. Hierdoor is gebleken dat, in sommige gevallen, dit een conflict geeft. Namelijk:

1. als de code gebruik maakt van HTTP_X_REWRITE_URL;

2. met het httpd.ini bestand van ISAPI_Rewrite versie 2 ;

Het advies (de oplossing) is om:

1. de codewijziging, zoals hierboven beschreven, ongedaan te maken. Hierdoor wordt er gebruik gemaakt van de beschikbare REQUEST_URI;

2. het httpd.ini bestand om te zetten naar het .htaccess van ISAPI_Rewrite versie 3;


Website tijdelijk sluiten voor onderhoud

met behulp van PHP en ISAPI_Rewrite versie 3.

U kunt eenvoudig uw website tijdelijk sluiten voor alle bezoekers, gedurende onderhoud aan de website. Met een vriendelijke melding.

Is uw website volledig geschreven in ASP.NET, dan kunt u het welbekende App_Offline.htm-bestand plaatsen. Dit schakelt de pool van de website uit, zolang het bestand aanwezig is. Verwijdert of hernoemt u het bestand, dan wordt de applicatiepool (en dus de website) weer gestart.

Een App_Offline.htm-bestand kan per applicatiefolder geplaatst worden.

Om iets soortgelijks te bewerkstelligen zonder ASP.NET, kunt u gebruik maken van bijvoorbeeld ISAPI_Rewrites .htaccess en PHP. Het volgende voorbeeld sluit de website, alleen voor bezoek vanaf uw IP-adres. Als test.

Wijzig 111.222.333.444 met uw IP-adres.

RewriteEngine On
RewriteBase /

# The next code line is currently commented out on purpose so it will be ignored.
# It is only for testing the code when you don't really want to close the site.
# It closes the site ONLY to you, but leaves it OPEN to everybody else.
# When commented out, the site is closed to everyone, including yourself.
# To enable the line, remove the # (pound sign) at the start of it.
# You MUST first change the digits 111 222 333 444 to match YOUR IP address.
RewriteCond %{REMOTE_ADDR} ^111.222.333.444$

# It is easy to modify the above line so it does the opposite:
# close the site to everybody else, but leave it OPEN to only you. # Put an exclamation point ! in front of the ^ character, to make it: !^
# The remaining two code lines close the site. They say:
# If the request is NOT for /maintenance.php, send /maintenance.php instead.
# Allowing maintenance.php to be served as-is prevents an endless redirect loop.
RewriteCond %{REQUEST_URI} !^/maintenance.php$
 
# To allow another file, copy the line above to here and change the filename.
# This line says: no matter what file was requested, serve maintenance.php.
# This is a rewrite (not a redirect), so we use the local file path, no http://
RewriteRule ^(.*)$ /maintenance.php [L]

Maak hierbij een PHP-bestand genaamd maintenance.php:

<?php
header('HTTP/1.1 503 Service Temporarily Unavailable',true,503);
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 172800');
?>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex,nofollow">
<title>503 - Temporarily Closed For Maintenance</title>
<style>
<!--
p {
    font-family: "Verdana", sans-serif;
}
-->
</style>
 
</head>
<body>

<b>Name of website</b>
 
is temporarily closed for maintenance.
 
Normal operation will resume as soon as possible.
 
</body>
</html>

Upload beide bestanden naar de root van uw website.

Terug