.htaccess
ik wil graag de urls van mijn website wijzigen d.m.v. Mod rewrite en ik heb een tut op phptuts gevolgd.
alleen is mijn probleem nu dat ik nooit met een .htaccess bestand gewerkt heb en de link op phptuts voor uitleg geraadpleegd maar deze bestaat niet meer.
dus mijn vraag nu bestaat een .htaccess al gelijk op een webserver of maak ik dit gewoon aan met een leeg document door deze .htaccess te noemen ?
en zouden er meer dingen in moeten staan behalve hetgeen wat op phptuts staat?
bij voorbaat dank voor de hulp!
Reshadd farid op 16/03/2012 17:25:51:
... of maak ik dit gewoon aan met een leeg document door deze .htaccess te noemen ...
Correct.
Gewijzigd op 16/03/2012 17:31:19 door - SanThe -
dus voorbeeld:
mijn url is: http://reshadfarid.nl/index.php?page=1
RewriteEngine On
RewriteBase /
RewriteRule ^/(.*)/$ ?page=1
is mijn htaccess dan goed?
Gewijzigd op 16/03/2012 18:30:33 door Reshad F
Let wel dat je nu (bijna) alles doorstuurt naar ?page=1
page is dus niet page.php
=1 is dus niet =$1
Test het eens?
RewriteEngine On
RewriteBase /
RewriteRule ^/(.*)/$ index.php?page=1
en ik krijg nog steeds dezelfde url..
de module staat wel aan bij de provider waar ik host dat heb ik gezien d.m.v. phpinfo()
mis ik iets? of doe ik nu iets fout?
en moet ik nu voor elke link een regel maken nee toch?
Kijk eens naar mijn bericht.
En tel dan het aantal dollartekens in jouw code.
Je mist er dus één.
FOUT:
GOED:
Hiermee bedoel ik:
Met deze htaccess:
Is het niet zo dat als je naar site.nl/old.html gaat de url wordt vervangen door site.nl/new.html, maar het is zo dat als je naar site.nl/new.html gaat je de content te zien krijgt van old.html.
Verder zou ik altijd adviseren om de Rules wat stricter te maken. Als je wilt dat het alleen cijfers bevat doe je iets als: \d*? en niet .*?
Ook kun je het beste lazy matches gebruiken (dus met ? erachter) anders kom je in de knoei als je meerdere / in een url propt.
Gewijzigd op 18/03/2012 11:31:35 door Wouter J
Ik heb nog niks kunnen uitproberen maar dank voor jullie reacties, wouter mijn bedoeling is dat de cojfers bijv gewoon seo vriendelijk worden bijv mijndomein.nl/contact zoiets. Het liefst
dit: website/index.php?page=1
naar: website/home
kan iemand me hier nog mee helpen misschien?
bij voorbaat dank!
dit is wat ikk nu gebruik
RewriteEngine on
RewriteRule ^home.html$ index.php?page=1
RewriteRule ^about.html$ index.php?page=2
RewriteRule ^contact.html$ index.php?page=3
RewriteRule ^code.html$ index.php?page=4
RewriteRule ^sitemap.html$ index.php?page=5
Gewijzigd op 06/04/2012 14:26:21 door Reshad F
Hoe htaccess werkt:
Je hebt bijv. deze rule:
Als je nu naar domein.nl/html/lorem-ipsum gaat dan gaat deze url eerst naar de htaccess. Deze denkt, hé dat is deze rule. Vervolgens laat hij niet domein.nl/html/lorem-ipsum/index.html zien, maar show_post.php?cat=html&slug=lorem-ipsum.
Als je nu naar domein.nl/show_post.php?cat=html&slug=lorem-ipsum gaat gebeurd er niks bijzonders. Het matched geen één htaccess rule en dus laat hij gewoon de pagina zien.
Ik heb het idee dat jij nog steeds denkt dat als je naar domein.nl/show_post.php?cat=html&slug=lorem-ipsum gaat je dan doorgelinkt wordt naar domein.nl/html/lorem-ipsum/, zo werkt het dus niet.
Mocht ik dit verkeerd denken en heb je het al wel door, is htaccess mod_rewrite wel geïnstalleerd op je server? Als je phpinfo() toont op een pagina staat hier dan bij apache > modules wel mod_rewrite tussen? En staan .htaccess wel in de root? Heb je wel een bestand .htaccess (dus zonder bestandsnaam, alleen met extensie)?
Kun je anders een online voorbeeld geven?
Gewijzigd op 06/04/2012 14:30:37 door Wouter J
phpinfo
Ja, ik heb het .htaccess genoemd ( dus niks ervoor )
in de root, is dit op de server de map waarin alle pagina's ook staan? of zelfs daarvoor?
waar wil je precies een online voorbeeld van?
p.s. ik gebruik dit om mijn urls goed te zetten.
ik weet wel hoe het werkt alleen weet ik niet hoe een htaccess in te stellen.. volgens mij staat de module mod_rewrite gewoon aan op mijn server zie hier Ja, ik heb het .htaccess genoemd ( dus niks ervoor )
in de root, is dit op de server de map waarin alle pagina's ook staan? of zelfs daarvoor?
waar wil je precies een online voorbeeld van?
p.s. ik gebruik dit om mijn urls goed te zetten.
ja ik wil het juist andersom, ik wil dat als ik naar index.php?page=2 ga ( omdat dit de eigenlijke link is) dat er dan about.html geschreven wordt.
En als je dit wilt voor Google is het beter om redirect
Zie ook: http://www.homepage-maken.nl/htaccess/redirect-htaccess.php
Gewijzigd op 06/04/2012 14:50:00 door Wouter J
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$array = array(1 => 'Home', 2 => 'About', 3 => 'Contact', 4 => 'Portfolio', 5 => 'code', 6 => 'sitemap');
$menu = '';
foreach($array as $k=>$v)
{
if(isset($_GET['page']) and $_GET['page'] == $k)
{
$class = 'current';
}
else
{
$class = '';
}
$menu .= '<li><a class="'.$class.'" href="index.php?page='.$k.'">'.$v.'</a></li>';
}
echo '
<ul>
'.$menu.'
</ul>
';
?>
$array = array(1 => 'Home', 2 => 'About', 3 => 'Contact', 4 => 'Portfolio', 5 => 'code', 6 => 'sitemap');
$menu = '';
foreach($array as $k=>$v)
{
if(isset($_GET['page']) and $_GET['page'] == $k)
{
$class = 'current';
}
else
{
$class = '';
}
$menu .= '<li><a class="'.$class.'" href="index.php?page='.$k.'">'.$v.'</a></li>';
}
echo '
<ul>
'.$menu.'
</ul>
';
?>
dit omdat ik niet steeds aparte pagina's wilde maken om steeds als er een link veranderd werd dat ik dit ook moest doen,
vervolgens vang ik dit op hiermee
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
switch($_GET['page']){
case '1':
include_once('main.php');
break;
case '2':
include_once('about.html');
break;
case '3':
include_once('contact.html');
break;
case '4':
include_once('portfolio.html');
break;
case '5':
include_once('code.html');
break;
case '6':
include_once('sitemap.html');
break;
default:
include_once('main.php');
break;
}
?>
switch($_GET['page']){
case '1':
include_once('main.php');
break;
case '2':
include_once('about.html');
break;
case '3':
include_once('contact.html');
break;
case '4':
include_once('portfolio.html');
break;
case '5':
include_once('code.html');
break;
case '6':
include_once('sitemap.html');
break;
default:
include_once('main.php');
break;
}
?>
de about.html is niets anders dan een content pagina die geinclude wordt. dus ik denk dat ik er altijd mee zal blijven stoeien of het geheel moet omgooien. of heb ik het nu bij het verkeerde eind?
Toevoeging op 06/04/2012 15:07:48:
edit: wouter als ik mij htacces dus verander in dit zal dit hetprobleem moeten oplossen? en dit is idd voor google :)
vb:
Redirect 301 /index.php?page=1 http://www.domeinnaam.nl/home.html
Quote:
of heb ik het nu bij het verkeerde eind?
Je bent nu bij het verkeerde eind. Haal in je htaccess alle .html weg en vervang dit met /. Vervolgens maak je je menu zo op:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$pages = array(1 => 'Home', 2 => 'About', 3 => 'Contact', 4 => 'Portfolio', 5 => 'code', 6 => 'sitemap',);
$menu = '<ul>';
foreach( $pages as $page_id => $page_name )
{
if( isset($_GET['page']) and $_GET['page'] == $page_id )
$class = 'current';
else
$class = '';
$menu .= '<li><a class="'.$class.'" href="/'.strtolower($page_name).'/">'.$page_name.'</a></li>';
}
$menu .= '</ul>';
echo $menu;
?>
$pages = array(1 => 'Home', 2 => 'About', 3 => 'Contact', 4 => 'Portfolio', 5 => 'code', 6 => 'sitemap',);
$menu = '<ul>';
foreach( $pages as $page_id => $page_name )
{
if( isset($_GET['page']) and $_GET['page'] == $page_id )
$class = 'current';
else
$class = '';
$menu .= '<li><a class="'.$class.'" href="/'.strtolower($page_name).'/">'.$page_name.'</a></li>';
}
$menu .= '</ul>';
echo $menu;
?>
En nu werkt je htaccess. Als je nu op about klikt wordt je doorgezonden naar domein.nl/about/ en dan wordt er via htaccess de pagina index.php?page=2 opgehaald en dat kun je gewoon in je originele pagina scriptje gebruiken en dus ben je dan klaar.