mod rewrite
Zucht, ik heb van alles geprobeert maar ik kom er niet uit. Ik heb dit stukje code om pagina's te rewriten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$3.$4
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z]+)/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1
RewriteRule ^([a-zA-Z]+)/$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$3.$4
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z]+)/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1
RewriteRule ^([a-zA-Z]+)/$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$2
Als ik nu naar bijv http://localhost/Home ga of http://localhost/Home/ dan werkt het goed. Vul ik ipv Home bijvoorbeeld About in, dan doet hij het ook, maar dan plakt hij achter het adres nog iets: http://localhost/About, als ik dit adres laad in de browser wordt het automatisch: http://localhost/About/?page=about
Waarschijnlijk is de volgorde van mijn regels verkeerd of iets dergelijks. Ik zie het iig niet.
Bvd, RT.
Gebruik de flag [L] achter de verschillende rules als je wilt dat andere rules niet meer uitgevoerd worden nadat de voorgaande uitgevoerd is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$3.$4
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z]+)/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z]+)/$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/main.css$ main.css
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/menu.css$ menu.css
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/images/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$3.$4
RewriteRule ^([a-zA-Z0-9_-]+)/images/([a-zA-Z]+)/([a-zA-Z0-9_-]+).([a-zA-Z]+)$ images/$2.$3
RewriteRule ^([a-zA-Z]+)/$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$2 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$2 [L]
Gebeurt dit niet toevallig in een van je php scripts?
Zie ook niet direct een fout, wel zie ik 10 regels htaccess waar het er 3 kunnen zijn...
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [L]
Het plusje weghaal, dan doet hij het wel. Maar dan nog, als ik dan deze pagina laad:
http://localhost/About dan komt er automatisch een / achter. Dit vind ik wel erg raar.
Edit:
Ik weet dat dit stukje van 10 regels korter kan, maar daar is mijn kennis van htaccess veel te laag voor. Sterker nog, ik vind het heel knap dat ik deze 10 regels heb verzonnen.
Ik weet dat dit stukje van 10 regels korter kan, maar daar is mijn kennis van htaccess veel te laag voor. Sterker nog, ik vind het heel knap dat ik deze 10 regels heb verzonnen.
Gewijzigd op 01/01/1970 01:00:00 door RT
Dat er automatisch een / achter komt is toch geen ramp? of vind je dat niks ? :P
Kleine tip:
RewriteRule ^([a-zA-Z]+)/$ index.php?page=$1 [L]
RewriteRule ^([a-zA-Z]+)$ index.php?page=$1 [L]
=
RewriteRule ^([a-zA-Z])/?$ index.php?page=$1 [L]
Het vraagteken maakt het teken ervoor optioneel, daardoor hoef je er geen 2 regels voor te typen.
Op het moment doe je alles met Reqriterule, das een heel mooi begin, maar denk er ook aan dat RewriteCond bestaat. Die is hier erg handig, omdat alles bijna naar index.php?... gaat behlave de css zo te zien
Ik vind het zeker niet erg dat er een / achter komt, maar ik zou wel graag de oorzaak hiervan willen weten. Ook is het zo dat nu http://localhost/Home niet meer werkt. Waarschijnlijk willen jullie mijn php zien die de pagina requests verwerkt, hier is hij dan:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
//handling page requests
include("database.php");
connect("**");
if(isset($_GET['page'])) {
if(!empty($_GET['page'])) {
$query = "SELECT * FROM pages WHERE title = '" . mysql_real_escape_string(ucfirst(strtolower($_GET['page']))). "'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
$data = mysql_fetch_assoc($res);
if(file_exists($data['file'])) {
$query = "SELECT * FROM subpages WHERE parent_id = '" . $data['id']. "'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
echo '<div id="subpages">';
echo '<h1>Categorieën</h1>';
while($subdata = mysql_fetch_assoc($res)) {
echo '<p>';
echo '<a href="/dev/' .$data['title'] . '/' . $subdata['title']. '/">' . $subdata['title']. '</a>';
echo '</p>';
}
echo '</div>';
include($data['file']);
echo '<div id="clearfooter">';
}
}
} else {
include("404.php");
}
} else {
$query = "SELECT * FROM subpages WHERE title = '" . mysql_real_escape_string(ucfirst(strtolower($_GET['page']))). "'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
$data = mysql_fetch_assoc($res);
if(file_exists($data['file'])) {
include($data['file']);
} else {
include("404.php");
}
} else {
include("404.php");
}
}
}
} else {
echo mysql_error();
echo "<p>Er is een probleem opgetreden tijdens het opvragen van de pagina. Probeer het later nog eens, onze excuses voor het ongemak.</p>";
}
} else {
$query = "SELECT * FROM subpages WHERE parent_id = '1'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
echo '<div id="subpages">';
echo '<h1>Categorieën</h1>';
while($subdata = mysql_fetch_assoc($res)) {
echo '<p>';
echo '<a href="/dev/home/' . $data['title']. '/">' . $data['title']. '</a>';
echo '</p>';
}
echo '</div>';
include("home.php");
}
}
}
} else {
$query = "SELECT * FROM subpages WHERE parent_id = '1'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
echo '<div id="subpages">';
echo '<h1>Categorieën</h1>';
echo '<p>';
while($data = mysql_fetch_assoc($res)) {
echo '<p>';
echo '<a href="/dev/home/' . $data['title']. '/">' . $data['title']. '</a>';
echo '</p>';
}
echo '</p>';
echo '</div>';
include("home.php");
}
}
}
?>
//handling page requests
include("database.php");
connect("**");
if(isset($_GET['page'])) {
if(!empty($_GET['page'])) {
$query = "SELECT * FROM pages WHERE title = '" . mysql_real_escape_string(ucfirst(strtolower($_GET['page']))). "'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
$data = mysql_fetch_assoc($res);
if(file_exists($data['file'])) {
$query = "SELECT * FROM subpages WHERE parent_id = '" . $data['id']. "'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
echo '<div id="subpages">';
echo '<h1>Categorieën</h1>';
while($subdata = mysql_fetch_assoc($res)) {
echo '<p>';
echo '<a href="/dev/' .$data['title'] . '/' . $subdata['title']. '/">' . $subdata['title']. '</a>';
echo '</p>';
}
echo '</div>';
include($data['file']);
echo '<div id="clearfooter">';
}
}
} else {
include("404.php");
}
} else {
$query = "SELECT * FROM subpages WHERE title = '" . mysql_real_escape_string(ucfirst(strtolower($_GET['page']))). "'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
$data = mysql_fetch_assoc($res);
if(file_exists($data['file'])) {
include($data['file']);
} else {
include("404.php");
}
} else {
include("404.php");
}
}
}
} else {
echo mysql_error();
echo "<p>Er is een probleem opgetreden tijdens het opvragen van de pagina. Probeer het later nog eens, onze excuses voor het ongemak.</p>";
}
} else {
$query = "SELECT * FROM subpages WHERE parent_id = '1'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
echo '<div id="subpages">';
echo '<h1>Categorieën</h1>';
while($subdata = mysql_fetch_assoc($res)) {
echo '<p>';
echo '<a href="/dev/home/' . $data['title']. '/">' . $data['title']. '</a>';
echo '</p>';
}
echo '</div>';
include("home.php");
}
}
}
} else {
$query = "SELECT * FROM subpages WHERE parent_id = '1'";
$res = mysql_query($query);
if($res) {
if(mysql_num_rows($res) >= 1) {
echo '<div id="subpages">';
echo '<h1>Categorieën</h1>';
echo '<p>';
while($data = mysql_fetch_assoc($res)) {
echo '<p>';
echo '<a href="/dev/home/' . $data['title']. '/">' . $data['title']. '</a>';
echo '</p>';
}
echo '</p>';
echo '</div>';
include("home.php");
}
}
}
?>
Database (innodb):
tabel pages
`id` int(11) NOT NULL auto_increment,
`title` varchar(50) NOT NULL,
`file` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
tabel subpages
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`file` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`)
Oja, het systeem is niet af, dus het subpage systeem kan nu nog niet werken. Maar dit heeft geen effect op het probleem.
Gewijzigd op 01/01/1970 01:00:00 door RT
als je goed wilt debuggen kun je ook alles achter een [R] typen, zo kun je zien waar hij naar toe gaat en een beetje meer idee krijgen wat er fout gaat