Htaccess-redirects

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

.htaccess-bestanden kun je gebruiken voor redirects. Voorbeelden:

Example: Site migration (2023)

Some lines from a .htaccess file for a site that has been migrated from Drupal to Wordpress

Redirect 301	/catalog/10	/hitachi/
Redirect 301	/catalog/101	/elu/
Redirect 301	/catalog/104	/schaafmessen/
Redirect 301	/catalog/105	/aeg/
Redirect 301	/catalog/109	/ferm/
Redirect 301	/catalog/11	/legna/
Redirect 301	/catalog/110	/holzer/

Example: When Redirect doesn't seem to work (2024.01)

Often, there are a lot of redirects in one .htaccess file. It usually becomes problematic when a rule applies to multiple URLs. The solution to this: Indicate with flag [L] that if a certain rule applies, that it shouldn't apply anymore other rules. However, you can't do this with Redirect, but you can use this with RewriteRule. E.g.:

RewriteEngine On

RewriteRule ^shop/hitachi/hitachi-buigapparaat$ https://voorbeeld.nl/hitachi/ [R=301,L]
RewriteRule ^shop/hitachi/hitachi-buigapparaat/$ https://voorbeeld.nl/hitachi/ [R=301,L]
RewriteRule ^bosch-apparaten/$ https://voorbeeld.nl/bosch/ [R=301,L]
RewriteRule ^shop/jungheinrich/jungheinrich-vorkheftruck/$ https://voorbeeld.nl/shop/jungheinrich/ [R=301,L]
RewriteRule ^shop/metabo/meuleuse-metabo/$ https://voorbeeld.nl/metabo/ [R=301,L]

or if you like something more pretty:

RewriteEngine On

RewriteRule \
   ^shop/hitachi/hitachi-buigapparaat$ \
   https://voorbeeld.nl/hitachi/ [R=301,L]

RewriteRule \
   ^shop/hitachi/hitachi-buigapparaat/$ \
   https://voorbeeld.nl/hitachi/ [R=301,L]

RewriteRule \
   ^bosch-apparaten/$ \
   https://voorbeeld.nl/bosch/ [R=301,L]

RewriteRule \
   ^shop/jungheinrich/jungheinrich-vorkheftruck/$ \
   https://voorbeeld.nl/shop/jungheinrich/ [R=301,L]

RewriteRule \
   ^shop/metabo/meuleuse-metabo/$ \
   https://voorbeeld.nl/metabo/ [R=301,L]

met 'www' naar zonder 'www'

[1]:

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

Eerste regel, RewriteEngine On: Pak de RewriteEngine erbij! We gaan aan de slag!

De onderdelen van de tweede regel:

  • %{HTTP_HOST} is een variabele. In dit geval voor de de host. Dat is hetzelfde als het domein
  • ! is een negatie. Dus niet
  • ^ reguliere expressie voor begin van
  • $ reguliere expressie voor eind van
  • RewriteCond (keyword): De voorwaarde voor rewrite volgt hierna
  • [NC]: Hostname is not case-sensitive

Bij elkaar: RewriteCond %{HTTP_HOST} !^www.example.com$: De voorwaarde voor Rewrite is, dat de host ongelijk is aan www.example.com.

De onderdelen van de derde regel:

  • .: een willekeurig teken
  • .*: 0 of meer herhalingen van willekeurige tekens
  • ^(.*)$: De gevraagde URL (zonder het domein)
  • $1: Substituut voor eerste wildcard-string op deze regel. Er is maar één wildcard-string (namelijk ^(.*)$). Dus $1 verwijst naar de gevraagde URL (zonder het domein)
  • L in [L,R=301]: Dit is het laatste gedeelte voordat de rewrite compleet is
  • R=301 in [L,R=301]: Return a 301 moved permanently to the web-client.

Bij elkaar: Pak de URL (zonder domein). Plak daar www.example.com/ voor. Verwerk dit, en geef aan dat het een 301-redirect betreft.

Zie ook

Bronnen