Probleem met redirect in htaccess

Status
Niet open voor verdere reacties.

damnsharp

Terugkerende gebruiker
Lid geworden
6 jan 2012
Berichten
1.394
Hoi, ik wil een redirect plaatsen en daar gaat wat mis. Ik leg het even stap voor stap uit.
Van 3 accomodaties in het Spaans moet ik een redirect maken.
De oude linkjes zijn:
accomodatie 1: websitenaam.com/es/alojamiento/alojamiento-rural-alicante/
accomodatie 2: websitenaam.com/es/alojamiento/glamping-alicante/
accomodatie 3: websitenaam.com/es/alojamiento/casas-rurales-alicante/

De tussenpagina wordt i.p.v. alojamiento hetzelfde als wat accomodatie 3 was (en daar gaat wat mis) namelijk casas-rurales-alicante

Dus ik maak redirect in htaccess:
RedirectPermanent /es/alojamiento/ https://www.refugiomarnes.com/es/casas-rurales-alicante/ (tussen pagina)
RedirectPermanent /es/alojamiento/alojamiento-rural-alicante/ https://www.refugiomarnes.com/es/casas-rurales-alicante/bed-and-breakfast/ (accomodatie 1)
RedirectPermanent /es/alojamiento/glamping-alicante/ https://www.refugiomarnes.com/es/casas-rurales-alicante/tiendas-glamping/ (accomodatie 2)

So far so good.
Maar bij de laatste redirect (accomodatie 3) gaat het niet goed:
RedirectPermanent /es/alojamiento/casas-rurales-alicante/ https://www.refugiomarnes.com/es/casas-rurales-alicante/casa-rural-completa/

Die gaat namelijk telkens naar websitenaam.com/es/casas-rurales-alicante/

Hoe krijg ik accomodatie 3 goed? Bedankt!
 
Zou ik mogen weten waarom je alles in .htaccess rewrite of doorstuurt?
Je kan ook prima een enkele 'voordeur' maken, zoals index.php, waar vanuit je alles wat binnenkomt delegeert naar de juiste pagina.
 
Laatst bewerkt:
waarom je alles in .htaccess rewrite of doorstuurt?
Voordeel is dat alles centraal bij elkaar staat met een iets betere performance. Nadeel: je breekt je tanden op die redirects :)
Een index.php in het mapje wat geredirect moet worden werkt doeltreffend. Voor- en nadeel precies andersom dan bij htaccess.

Als het weinig redirects zijn dan kan je het in htaccess per pagina oplossen
Code:
RewriteEngine On
RewriteBase /

RewriteRule ^es/alojamiento/alojamiento\-rural\-alicante$  https://www.example.nl/... [L,R=301]
RewriteRule ^es/alojamiento/glamping\-alicante$            https://www.example.nl/... [L,R=301]
RewriteRule ^es/alojamiento/casas\-rurales\-alicante$      https://www.example.nl/... [L,R=301]

# de 301 redirects staan ergens tussen RewriteEngine On  en de WP rewrite.
Let erop dat je in de linker (oude) url een escape (\) zet voor een minteken (-) en voor een punt (.)

Zoals php4u aangaf kan je een index.php gebruiken in het mapje wat je wilt redirecten.
Code:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Status: 301 Moved Permanently");
header("Location: https://www.example.nl/page/page/");
exit(0);
?>
 
Aan de hand van het hele pad wat je aanroept hoef je niet per map een index te plaatsen.
Dit kan prima vanuit de webroot centraal worden geregeld. :)
 
Alle redirects via index.php in de webroot werkt alleen als de map structuur van de website goed is opgezet. Stel je hebt:
/voorbeelden (de pagina) en /voorbeelden/fotos (de afbeeldingen).

Pagina /voorbeelden moet worden veranderd in /portfolio
Echter, alle foto's moeten in de bestaande map blijven omdat de foto's ook in andere pagina's worden gebruikt.

Als iemand naar de oude url /voorbeelden gaat dan zal die beslist naar die map gaan i.p.v. index.php in de webroot.
Oorzaak hiervan is dat in htaccess staat dat er niet naar de webroot wordt gegaan als de directory bestaat
Code:
]RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Wij (jullie en ik) zetten images in een ander path vanaf de webroot :) maar niet iedereen volgt deze "best practice".
 
Laatst bewerkt:
@bron en @php4u bedankt voor het reageren! Ik gebruik inderdaad liever htaccess vanwege alles mooi bij elkaar staat (en ook zo aangeleerd ;) )

Inderdaad, deze gaat mis: RedirectPermanent /es/alojamiento/casas-rurales-alicante/ https://www.refugiomarnes.com/es/casas-rurales-alicante/casa-rural-completa/
maar deze gaat goed: RewriteRule ^es/alojamiento/casas\-rurales\-alicante$ https://www.refugiomarnes.com/es/casas-rurales-alicante/casa-rural-completa/

@bron, begrijp ik goed uit je verhaal dat ik beter een RewriteRule ipv RedirectPermanent in htaccess kan gebruiken?
Want ik snap nog niet precies waarom de laatste RedirectPermanent niet goed gaat.
 
Laatst bewerkt:
Het kan wel, maar hoe meer je het uitbreidt, hoe lastiger het te onderhouden wordt.
Daarom adviseer ik voor grote websites een aparte ingang via een index.php
Daarvandaan kan je dan de route regelen.

Hoe is je site nu ingedeeld? In losse pagina's waarbij je steeds alles opnieuw includeert? Of...?


Als je mijn advies volgt, dan heb je enkel dit in .htaccess staan:
Code:
RewriteEngine on

RewriteBase /

# Negeer directories en filenames.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Stuur voor de rest alles door naar index.php
# Gebruik QSA dat de querystring ook gebruikt kan worden.
RewriteRule . index.php [L,QSA]

Zet dit in je index.php
PHP:
<?php
$path = trim(substr($uriData['path'], strlen(dirname($_SERVER['SCRIPT_NAME']))), '/');
print_r($path);
?>
En roep bijvoorbeeld eens dit aan:
www.jouwsite.com/es/alojamiento/alojamiento-rural-alicante/

Je kan het eerste deel es al gebruiken om de vertaalslag naar Spaans te maken.
 
Laatst bewerkt:
Bedankt @php4u voor je reactie :thumb:
Omdat er al veel regels in het htaccess bestand staan denk ik dat het lastig wordt om dit om te zetten naar "jouw" manier.
Ik moet er even over nadenken.
 
Bedankt @php4u voor je reactie :thumb:
Omdat er al veel regels in het htaccess bestand staan denk ik dat het lastig wordt om dit om te zetten naar "jouw" manier.
Ik moet er even over nadenken.

Het is geen triviale wijziging, maar ik zou het zeker in je achterhoofd houden als je de boel op de schop gaat gooien.
Maar hoe is je applicatie (los van het routing gedeelte) nu opgebouwd dan?
 
RedirectPermanent of Redirect 301
- hierbij is de "RewriteEngine On" module niet nodig.
- Alleen voor eenvoudig redirects, slim redirecten niet mogelijk.

Rewrite, bijv. RewriteRule (met/zonder RewriteCond)
- de "RewriteEngine On" module is hiervoor wél nodig.
- krachtig omdat je Regular Expressions gebruikt.

Bij de Rewrite heb je af en toe paracetamol nodig omdat het puzzel- en testtijd vraagt.

Laatst had ik bij iemand oude pagina's die verwijderd moesten worden + een redirect naar home.
Elke pagina begon met 1 letter (kon van alles zijn), daarna -nest- en daarna een willekeurige tekst. Opgelost in 1 rewrite.
RewriteRule ^[a-z]\-nest\-(.*)?\.html$ https://www.example.nl/ [NC,L,R=301]

Als hulpje gebruik ik meestal https://regexr.com (in linker kolom vind je de cheat sheet)
Is ook bruikbaar voor regex in Javascript, PHP, enz.
 
Laatst bewerkt:
Bedankt @php4u en @bron voor beider reacties.
@php4u, het is een WP site (beheer overgenomen) en veel redirects in htaccess.
@bron, duidelijke uitleg, fijn! nu snap ik goed verschil tussen RedirectPermanent en Rewrite. Snap al helemaal dat het een gepuzzel is met Rewrite want vind het snel ook ingewikkeld worden, vandaar dat ik liever RedirectPermanent gebruik. Maar ik zie ook nu dat het soms wel moet. Ik zal in de toekomst regexr.com gaan gebruiken, alhoewel ik het best lastig vind.

Ik sluit het topic, top weer voor jullie hulp! :thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan