Mijn eerste stappen in de wereld van mod_rewrite wil niet lukken

Status
Niet open voor verdere reacties.

ElsyV

Gebruiker
Lid geworden
7 sep 2007
Berichten
218
Hallo allemaal,

Een paar jaar geleden als eens geprobeerd om het voor elkaar te krijgen maar ik heb het toen opgegeven.
Nu maar weer eens in verdiept en ik snap er echt niets van.
Heb al 4 cursussen online bekeken en het laatste wat ik nu heb gevonden is een generator: http://www.generateit.net/mod-rewrite/

Hier heb ik de opties uitgevinkt om de id-s te laten zien.
Onderstaande link is er nu overgebleven.

http://www.voormijnkind.eu/Overig/Geboortekaartjes

Ik heb deze link door de generator gehaald: http://www.voormijnkind.eu/?hoofdru...brubriek_id=6&subrubrieknaam=Geboortekaartjes

Als ik nu het bestand upload en mijn pagina bezoek dan is de hele opmaak weg, dus het css bestand wordt blijkbaar niet aangesproken.
En als ik boven de rubriek ga staan met mijn muis dan zie ik nog steeds de oude, lange url.

Wie kan voor mij een stuk code maken dat werkt.

Dit is de code die de generator voor me heeft gemaakt:

Code:
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /?hoofdrubriek_id=5&hoofdrubrieknaam=$1&subrubriek_id=6&subrubrieknaam=$2 [L]

ps. Ik heb het .htaccess bestand weer verwijderd omdat het om een nieuwe website gaat die al online staat.
 
Dat je CSS niet meer goed geladen wordt heeft te maken dat na je mod_rewrite actie je CSS wordt ingeladen als relatief path.

Elke scheiding in de URL is als het ware een 'map'. Dus als jij je CSS bestand inlaadt als ../stijl.css dan zoekt hij 1 map hoger naar het CSS bestand.
In jou voorbeeld heb je nu /overig/geboortekaartjes.

Dit betekent dat de CSS wordt gezocht in de 'map' overig welke hoogstwaarschijnlijk niet bestaat.

Dit kun je oplossen door een base reference aan te geven in je HTML.

<head>
<base href="http://www.voormijnkind.eu/" target="_blank" />
</head>

Vervolgens moet je op de plek van de verwijzigen uitgaan van je "ROOT" welke je hebt gedefinieerd in de base ref.
Dus als je een map CSS hebt waar je stijl.css in staat doe je nu gewoon <link rel="stylesheet" src="css/stijl.css" />

Houdt er rekening mee dat alles wat ingeladen wordt vanuit de ROOT wordt bepaald. Dus ook images en javascripts bijvoorbeeld.
 
Laatst bewerkt:
Mijn css bestand zit niet in een map.
Ik heb je regel toegevoegd aan de <head>

Afbeeldingen worden nu niet geladen.
Op de index pagina roep ik zo een afbeelding aan: <img src="afbeeldingen/ontwerp-2012_02.jpg" alt="HOME" width="865" height="93" border="0">
Die zitten dus wel in een map.
Moet ik hier een aparte regel voor maken in het .htaccess bestand?
 
Beste "Gezinsmanager",

Ik heb deze vraag verplaatst van "Programmeren > PHP" naar "Websites maken > Algemene vragen" aangezien het niet specifiek een PHP vraagstuk is :)


Met betrekking tot je vraag: Je wilt een specifiek onderdeel van je website benaderen via een URL. Je expressie is daar nu te algemeen voor.

Probeer dit eens (De namen hoef je niet eens mee te geven aan de URL)
Code:
RewriteRule ^/Overige/Geboortekaartjes$ /?hoofdrubriek_id=5&subrubriek_id=6 [L]
 
Ik heb nu dit erin gezet:
HTML:
RewriteEngine On
RewriteRule ^/Overige/Geboortekaartjes$ /?hoofdrubriek_id=5&subrubriek_id=6 [L]

Wat ik dan zou verwachten is als ik mijn muis boven het menu-tabje "Overig - Geboortekaartjes" houdt dat ik dan dit moet zien: www.voormijnkind.eu/Overig/Geboortekaartjes
Maar ik zie nog steeds de oude volledige url.

Ik heb het .htaccess bestand nu nog online staan (ge-upload).

Wat me ook opvalt is dat nu de link in een nieuwe venster opent, wat niet de bedoeling is.
 
Hoi Gezinsmanager,
Even terzijde:
  • Op de pagina Speelgoed staat dat A-Toys.nl "Momenteel geen acties" heeft.
  • Ga je echter kijken bij a-toys zelf, dan hebben ze een rubriek Aanbiedingen met 15 aanbiedingen.
  • Ook hebben ze de eerste helft van oktober nog een extra korting van 10% omdat dan hun magazijn gesloten is en er niet meteen geleverd kan worden.

Met vriendelijke groet,
CSShunter
 
Bedankt voor de tip maar deze website is nieuw en nog niet up to date. Ik zal er zeker naar kijken.
 
Zo werkt mod_rewrite niet :)

De URL op de pagina zul je aan moeten passen zodat hij overeenkomt met de URL die je wilt.
Onder water zorgt de webserver (Apache in dit geval) er dan voor dat hij eigenlijk de juiste URL benaderd.

Het is niet zo dat omdat je die regel in de .htaccess hebt aangemaakt ineens de URLs op de pagina's ook veranderen.

Overigens is het handmatig aanmaken van deze regels aardig tijdrovend.
Ik zie dat er gebruik gemaakt wordt van ID's in de URL, dit doet mij vermoeden dat er iets van een CMS achter zit.

Is dat een open-source CMS of iets betaald? En heeft deze geen ingebouwde rewrite mogelijkheden?

Openen ze sinds deze rewrite regel in een nieuw venster?
Overigens is het niet alleen deze link, maar alle links openen in een nieuw venster.
 
Ik heb nu dit erin gezet:
HTML:
RewriteEngine On
RewriteRule ^/Overige/Geboortekaartjes$ /?hoofdrubriek_id=5&subrubriek_id=6 [L]

Wat ik dan zou verwachten is als ik mijn muis boven het menu-tabje "Overig - Geboortekaartjes" houdt dat ik dan dit moet zien: www.voormijnkind.eu/Overig/Geboortekaartjes
Maar ik zie nog steeds de oude volledige url.
De links die op je site staan worden niet automatisch aangepast (de HTML is immers nog ongewijzigd), dat moet je zelf doen.

EDIT: eh, beetje te laat.
 
Laatst bewerkt:
[ot]
@Naarling-Edit: Net op tijd, want ik wilde een :P met verwijzing naar #8 gaan toedienen. :d
[/ot]
 
Zo werkt mod_rewrite niet :)

De URL op de pagina zul je aan moeten passen zodat hij overeenkomt met de URL die je wilt.
Onder water zorgt de webserver (Apache in dit geval) er dan voor dat hij eigenlijk de juiste URL benaderd.

Het is niet zo dat omdat je die regel in de .htaccess hebt aangemaakt ineens de URLs op de pagina's ook veranderen.

Overigens is het handmatig aanmaken van deze regels aardig tijdrovend.
Ik zie dat er gebruik gemaakt wordt van ID's in de URL, dit doet mij vermoeden dat er iets van een CMS achter zit.

Is dat een open-source CMS of iets betaald? En heeft deze geen ingebouwde rewrite mogelijkheden?

Openen ze sinds deze rewrite regel in een nieuw venster?
Overigens is het niet alleen deze link, maar alle links openen in een nieuw venster.

Oh, dus ik heb altijd verkeert om zitten denken!
Ik maak de pagina trouwens zelf dus kan ook alles aanpassen.
Dus ik moet de link op de website weergeven hoe ik het wil en in de .htaccess zet je de link hoe hij oorspronkelijk was.

Ik ben er al achter waarom alle linken in een nieuw tabblad openen, komt door stukje code van een post hierboven.
<base href="http://www.voormijnkind.eu/" target="_blank" />
Heb ik dus maar weer weggehaald, of moet deze toch blijven staan en dan target="_blank" weghalen?

Mijn website lopen bij een host en deze zegt dat modRewrite aanstaat. Of er ingebouwde rewrite mogelijkheden zijn weet ik niet.

Ik heb me dus al zo vaak verdiept in dit modRewrite gebeuren maar ik krijg het maar niet voor elkaar.
Ik kan nu beter met deze website gaan testen door er even een kopie van te maken.

Maar nu ik weet dat ik het dus altijd verkeerd in m'n hoofd had zitten, kan ik me wel weer een keer opnieuw inlezen in een of andere (begrijpelijke) cursus.......nog tips?
 
Laatst bewerkt:
Hoe zijn de pagina's opgebouwd? Het lijkt mij wel dat er een database o.i.d. achter zit.

De target="_blank" weghalen is voldoende :)
 
Laat je het menu opbouwen door de database?

Wanneer je dat wel doet kun je eenvoudig URL's wijzigen op basis van de databasegegevens.

Zijn de namen die je geeft uniek?
Ik neem nu namelijk aan dat je pagina's binnenhaalt aan de hand van de ID.

Je zou kunnen overwegen om ze op te halen op basis van hun naam, op die manier zou je makkelijker 1 RewriteRule kunnen maken die voor elke pagina zal werken :)
 
Gedeeltelijk maar dit is natuurlijk gewoon aan te passen. Ik zou alles in de database kunnen zetten.

PHP:
<ul id="MenuBar1" class="MenuBarHorizontal">
		  <li><a class="favoriet" href="?hoofdrubriek_id=1&rubrieknaam=Speelgoed&subrubriek_id=2&subrubrieknaam=Speelgoed" onClick="_gaq.push(['_trackEvent', 'Tekstlink', 'Rubriek', 'Speelgoed']);" rel="nofollow" ><strong>Speelgoed</strong></a></li>
		  <li><a class="favoriet" href="?hoofdrubriek_id=2&rubrieknaam=Kleding&subrubriek_id=4&subrubrieknaam=Kleding" onClick="_gaq.push(['_trackEvent', 'Tekstlink', 'Rubriek', 'Kleding']);" rel="nofollow" ><strong>Kleding</strong></a></li>
		  <li><a class="favoriet" href="?hoofdrubriek_id=3&rubrieknaam=Verzorging&subrubriek_id=3&subrubrieknaam=Verzorging" onClick="_gaq.push(['_trackEvent', 'Tekstlink', 'Rubriek', 'Verzorging']);" rel="nofollow" ><strong>Verzorging</strong></a></li>
		      <li><a class="favoriet" href="?hoofdrubriek_id=4&rubrieknaam=Meubels&nbsp;&amp;&nbsp;Vervoer&subrubriek_id=7&subrubrieknaam=Meubels&nbsp;&amp;&nbsp;Vervoer" onClick="_gaq.push(['_trackEvent', 'Tekstlink', 'Rubriek', 'Meubels&nbsp;&amp;&nbsp;Vervoer']);" rel="nofollow" ><strong>Meubels&nbsp;&amp;&nbsp;Vervoer</strong></a>
	      </li>
          <li><a href="#"><strong>Overig</strong></a>
                <ul>
                <li>
                  <?php
			//	laat de subrubrieknaam zien					
			$query = "
				SELECT 
					naam,
					id,
					hoofdrubriek_id,
					tip
				FROM 
					subrubriek
				WHERE 
					hoofdrubriek_id = 5
				AND zichtbaar <> FALSE
				ORDER BY 
					naam";						
			$result = mysql_query($query);
				if(!$result){
    						trigger_error(mysql_error().'<br />In query: '.$query) ;
							}else{
								
								while($row = mysql_fetch_assoc($result)){
									?>
                  <a class="menu" href="?hoofdrubriek_id=5&hoofdrubrieknaam=Overig&subrubriek_id=<?php echo $row['id'].'&subrubrieknaam='.$row['naam']?>" onClick="_gaq.push(['_trackEvent', 'Tekstlink', 'Rubriek', 'Overig | <?php echo $row['naam']?>']);" rel="nofollow" ><img src="images/bullet_blue.png" alt="Acties" border="0" align="absmiddle" /><?php echo $row['naam']?></a>
                  <?php
										}
									}
									?>
                                    </li>
                </ul>
          </li>
              <li><a href="#"><strong>KORTINGCODES</strong></a>
                <ul>
                  
                  <li><?php
			//naam en id van webshop
			$queryShop = "
				SELECT 
					id,
					naam,
					naam_id,
					link_id,
					startdatum,
					CASE
		WHEN DATEDIFF(NOW(), startdatum) < 7 THEN CONCAT(naam, '&nbsp;<img src=\"images/new.png\" alt=\"Nieuw toegevoegd\" border=\"0\" align=\"absmiddle\" />')
		ELSE naam
		END AS link
				FROM 
					actie
				WHERE
					zichtbaar <> FALSE
				AND CURRENT_DATE() BETWEEN startdatum AND einddatum
				GROUP BY
					naam_id
				ORDER BY naam";
				
				 	$resultShop = mysql_query($queryShop) or die (mysql_error());
					
					while($rowShop = mysql_fetch_assoc($resultShop)){
			?>
             <a class="menu" href="?naam_id=<?php echo $rowShop['naam_id'].'&amp;actieshop='.$rowShop['naam']; ?>" onClick="_gaq.push(['_trackEvent', 'Tekstlink', 'Menu | actietab', '<?php echo $rowShop['naam'];?>']);" title="De laatste kortingsacties van <?php echo $rowShop['naam'];?>" >
                    <img src="images/bullet_blue.png" alt="Acties" border="0" align="absmiddle" /><?php echo $rowShop['link'];?></a>
                  
                  <?php
					
			}
			?></li>
                  <li><a class="menu" href="?korting_acties" onClick="_gaq.push(['_trackEvent', 'Tekstlink', 'Rubriek', 'Totaal overzicht | Kortingscodes']);" rel="nofollow" >
                    <div class="submenu-linken"><strong>Alle kortingscodes</strong></div>
                  </a></li>
                  
                </ul>
          </li>
          
          
          </li>
	    </ul>

Voor de rest zijn de namen wel uniek.

Heb je een voorbeeld hoe zo'n re-wright regel er dan uit ziet?
 
Wanneer je dan op namen de queries bouwt kun je dit doen:
Code:
RewriteEngine On

RewriteCond %{REQUEST_FILENAME}     !-f
RewriteCond %{REQUEST_FILENAME}     !-d
RewriteRule ^([a-zA-Z])+\/([a-zA-Z])+$ index.php?hoofdrubriek=$1&subrubriek=$2 [L]
RewriteRule ^([a-zA-Z])+$ index.php?hoofdrubriek=$1 [L]

Ik ben er niet helemaal zeker van of ik de backslash moet escapen bij de eerste regel dus laat eventueel die eerst achterwege zodat je de hoofdrubrieken werkend hebt.

De resultaten moeten dit zijn:
[table="width: 500, class: dotted"][tr][td]Aanroep [/td][td] Daadwerkelijk[/td][/tr]
[tr][td]http://www.voormijnkind.eu/Overige [/td][td] http://www.voormijnkind.eu/index.php?hoofdrubriek=Overige[/td][/tr]
[tr][td]http://www.voormijnkind.eu/helpmij [/td][td] http://www.voormijnkind.eu/index.php?hoofdrubriek=helpmij[/td][/tr]
[/table]

Om te achterhalen welke URL daadwerkelijk aangeroepen wordt kun je deze PHP-variabele gebruiken:
PHP:
echo $_SERVER['REDIRECT_QUERY_STRING'];
 
Okay, ik ga er morgen mee aan de slag en laat wel horen hoe het gaat. Bedankt alvast.
 
Dit gaat voor mij niet werken want ik snap er niets van.

Stel dit is een tabje in mijn menu:

PHP:
<li><?php
			//	laat de hoofdrubrieknaam zien					
			$query = "
				SELECT 
					naam
				FROM 
					hoofdrubriek
				";						
			$result = mysql_query($query);
				if(!$result){
    						trigger_error(mysql_error().'<br />In query: '.$query) ;
							}else{
								
								while($row = mysql_fetch_assoc($result)){
									?>
                  <a href="<?php echo $row['naam']; ?>" ><?php echo $row['naam'];?></a>
                  <?php
										}
									}
									?></li>

Hoe weet de browser dan dat hier eigenlijk http://www.voormijnkind.eu/?hoofdrubriek_id=1&rubrieknaam=Speelgoed moet staan?
 
Laatst bewerkt:
Dat hoeft de browser niet te weten, daar zorgt mod_rewrite voor ;)

Omdat die door de RewriteRule /Overige omzet naar /index.php?hoofdrubriek=Overige
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan