URL herschrijven/Mooi maken SEO

Status
Niet open voor verdere reacties.

thapriest

Gebruiker
Lid geworden
28 okt 2009
Berichten
559
Goedemiddag, na een lange tijd afwezig ook weer actief:).

Wie kan me helpen met een uitleg over Mod-rewrite, ik heb al aardig wat tus, gevolgd, en veel gelezen, maar ik blijf het niet snappen.

Ik heb een site waarin je huizen kunt zoeken, a.d.h.v verschillende criteria, daardoor krijg je dus urls als index.php?id=10&land=duitsland&huis=huisje bijvoorbeeld.
Nu zou ik daar graag iets van maken als huizen/duitsland/naamvanhuis.html, maar ik kom er niet uit.

Ik snap ook niet dat je een regel toevoegt in je htacces, en dan vervolgens in je scripts de link moet aanpassen, hoe weet de htacces dan waar ie naartoe moet? de pagina wordt namelijk gegenereerd dmv een query, en bestaat dus fysiek niet?
 
@kenikavanbis: Om als advies meteen het overstappen naar een PHP framework te geven is overdreven.
Als het om een nieuw project ging zou een framework een (goede) opties zijn.

.htaccess bestanden werken omdat een Apache web-server geprogrammeerd is ze te lezen.

Frameworks werken vaak op basis van vaste waardes omdat het via Model View Controller werkt en dus (vaak) via een router op basis van bestanden http://www.site.nl/controller/functie/parameter1/parameter2/etc

Alles valt en staat met je structuur.
Als je bepaalde zaken niet variabel hebt kun je dat opnemen.

Als je id's niet (gauw) veranderen kun je die vast opnemen.
Wordt iets van
.htaccess
RewriteEngine On
RewriteRule ^huizen\/(.*)$ index.php?id=10&land=$1 [L]
RewriteRule ^huizen\/(.*)\/(.*)\.html$ index.php?id=10&land=$1&huis=$2 [L]
Mijn kennis is wat roestig dus controleer het goed.

Wil je echt volledig dynamisch werken is het advies van kenikavanbis aan te raden. Frameworks zijn daarop gebouwd en schelen een boel werk.
 
ik heb ooit in een les gezien maar Ik dacht dat dit van cake php kwam en dat je zonder de lib niet kon wat iedereen nu wel al ondersteund waar vroeger het niet was.
 
Cake PHP is geen library maar een framework :)
 
Beiden dank voor de reactie:)

@kenikavanbis: Om als advies meteen het overstappen naar een PHP framework te geven is overdreven.
Als het om een nieuw project ging zou een framework een (goede) opties zijn

Het is een "nieuw" project echter draai ik dit alles op een CMS (modX), waarin al wel een en ander zit voor SEO en mod_rewrite, alleen heb ik daarin een aantal custom modules geschreven in PHP die niet mee worden genomen in het hele SEO verhaal.

Ik ben al wel weer een heel stuk verder en begin te begrijpen hoe het werkt, de rule die je schrijft ThaDevil, heb ik vanmiddag zelf op bijna een soortgelijke wijze toegepast en werkend gekregen:D

heb nu even geen toegang tot de bestanden, maar ik zal ze morgen even voor een evt topic-zoeker posten.

Waar ik nog wel tegen aan loop is dat ik een zoek formpje heb, die je laat zoeken per land. deze wordt simpelweg gepost en krijg dan resultaat m.b.v. een query offcourse. Alleen heb ik even geen idee, hoe ik deze post afvang om er een fatsoenlijke url van te maken. he gekke is ook dat hij deze doorstuurt naar huis.html(het alias van de pagina in modx) maar haal daar dus niets uit om te hervormen.

Ook , vond ik na het toepassen van de eerste rewrit rule, dat mijn css niet geladen werd, mijn oplossing daarvoor was om de base slash toe te voegen, en de css uit te sluiten in een aparte rewrite rule, mocht het iemand helpen;)
 
Dank voor je wederom snelle antwoord.

Waar ik dus tegenaanloop, is dat ik die variabelen op geen enkele manier zie, nog kan oproepen in de url. als ik nu per land opvraag, staat er in mijn browser www.mijnsite.nl/huis.html , zonder enige variabele.

als ik dr print_r($_POST) doe, dan is ook mijn submit een var, maakt dit nog uit voor het afvangen?
 
Dat het verzendknopje mee komt met $_POST is normaal, of je daar wat mee wilt doen hangt van jezelf af. Hij is aanwezig mocht je dat willen.

Blijkbaar staat je formulier op method="GET"

Als je eenvoudigweg wilt dat er een lijstje met landen is en op basis daarvan je naar een url gaat kun je dit ook via een javascript-actie op de dropdown uitvoeren.

Dan wordt het een kwestie van zoiets:
HTML:
<select onchange="document.location='http://site.nl/huizen/'+ this.options[this.selectedIndex].value;">
  <option value="">-- Selecteer een land --</option>
  <option value="duitsland">Duitsland</option>
  <option value="nederland">Nederland</option>
</select>
 
Laatst bewerkt:
Ja dat is idd waar. maar formulier staat op methode POST;) like so:

PHP:
<?php
error_reporting(E_ALL ^ E_NOTICE);
//Haal gegevens op uit tabel accomodaties, hieronder checken we deze in het form tegen de afzonderlijke tabellen.
$sql = "SELECT * FROM villas";
$result = mysql_query($sql) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {
	    $acco=$record['accomodatieTypes'];
        $soortreis = $record['reisSoorten'];
		$countryid = $record['land_id'];
		$offer_price = $record['offer_price'];
		$sterren = $record['klasse'];
}
?>
	<form name="form1" action="villas.html; ?> " method="post" id="form1">  	  <table width="235" border="0">


        <tr>
          <td width="77">Bestemming:</td>
          <td width="235"><select name="country" width="200" STYLE="width: 160px"  onchange="document.forms['form1'].submit();">
		<?php 				//Haal waardes op uit tabel countries
							$query = mysql_query("SELECT * FROM countries ORDER BY naam ");
						while($record=mysql_fetch_array($query)) {
							$idland = $record['id'];
							$naamland = $record['naam'];
							$url = $naamland;		
		?>
	
					<option value="<?php echo $idland ; ?>" <?php if ( $_POST['country'] == $idland ): ?> selected="selected"<?php endif; ?>><?php echo $naamland;?></option>
			<?php } ?>
			<option value="" <?php if ( $_POST['country'] == '' ): ?> selected = "selected" <?php endif; ?> disabled = "disabled" >-- Kies een land --</option>


		  </td>
        </tr>
	</table>	  

<input type="submit" name="zoekeenland" id="search" value="Zoek" /> 
</form>

Zoals je ziet haal ik dus de landen uit een database, dit omdat dit nogal eens varieert qua aanbod, en je ook een backside hebt waarin je alles kan invullen.om dat handmatig aan te passen lijkt me niet wat;).
 
Zelfde principe toch?
PHP:
<select onchange="document.location='http://site.nl/huizen/'+ this.options[this.selectedIndex].value;">
  <option value="">-- Selecteer een land --</option>
<?php
$query = mysql_query("SELECT naam FROM countries ORDER BY naam ");
while($record=mysql_fetch_assoc($query)) {
  echo '<option value="'. $record['naam'] .'">'. $record['naam'] .'</option>';
}
?>
</select>
 
Uhm , is inderdaad zelfde principe, maar nu kan ik niet de mooie url oproepen, zodat daar ook de pagina die variabel is, en niet fysiek bestaat natuurlijk tevoorschijn komt.

Bovendien is JS clientside, staat het uit, zou ik alsnog een probleem hebben, omdat ik ook doorlink binnen mijn pagina naar de mooie url..
 
De mooie url komt via het onchange gedeelte, die stuurt je door naar /huizen/{selectie}

Tja JS uitschakelen schiet dan niet op.

Als je het formulier invult en je leest $_POST uit dan staan daar je waardes toch in?
Gebruik je dan een header(Location: http://.....); zou het moet lukken.

Wel opletten dat je geen output geeft voor de header-functie.
 
Ja dat klopt, en opzich werkt dat helemaal prima en krijg ik een mooie url, maar in mijn geval mkoet het van 2 kanten werken... als ik dus een url intyp als: mijnsite.nl/Duitsland/mooihuis , zou ook die pagina on the fly moeten worden aangemaakt, en dat doet JS(volgens mij) niet.;)

De functie gaat straks ook live, dus ik moet ook rekening houden met het feit dat gebruikers JS hebben uit staan, evenals de zoekmachines, die gaan de pagina dan niet indexeren.

Gebruik je dan een header(Location: http://.....); zou het moet lukken.
Die snap ik niet helemaal:o
 
PHP:
if($_SERVER['REQUEST_METHOD'] == "POST") {
  // Allerlei bewerkingen op de variabelen
  $land = 'duitsland';
  header("Location: http://site.nl/huizen/". $land);
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan