httacces mod_rewrite
Er zullen genoeg topics hier over aangemaakt zijn, maar het lukt me nog steeds niet.
Heb al verschillende dingen geprobeerd,
Probleem:
Ik heb een pagina systeem daarmee bedoel ik; x aantal berichten per pagina.
als ik nu naar userlist.php?page=4 ga, werkt het wel!
Maar als ik dit dus met httacces wil doen userlist/4
werkt het niet.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ErrorDocument 404 /error.php
Options +FollowSymlinks
Options +Indexes
<Files .htaccess>
deny from all
</Files>
<Files ~ "\.log$">
Order allow,deny
Deny from all
</Files>
<ifModule mod_php5.c>
php_value zlib.output_compression 16386
php_value register_globals off
php_value session.use_trans_sid 0
</ifModule>
<ifModule mod_rewrite.c>
RewriteEngine on
# Uncomment the line below if the site doesn't work and you have mod_rewrite installed.
# RewriteBase /
RewriteEngine On
RewriteRule ^userlist/([A-Za-z0-9-]+)/?$ userlist.php?id=$1 [NC,L]
</ifModule>
Options +FollowSymlinks
Options +Indexes
<Files .htaccess>
deny from all
</Files>
<Files ~ "\.log$">
Order allow,deny
Deny from all
</Files>
<ifModule mod_php5.c>
php_value zlib.output_compression 16386
php_value register_globals off
php_value session.use_trans_sid 0
</ifModule>
<ifModule mod_rewrite.c>
RewriteEngine on
# Uncomment the line below if the site doesn't work and you have mod_rewrite installed.
# RewriteBase /
RewriteEngine On
RewriteRule ^userlist/([A-Za-z0-9-]+)/?$ userlist.php?id=$1 [NC,L]
</ifModule>
dit is het laatste wat ik geprobeerd hebt.
Hoor het graag !
probeer eens:
(en aangezien je aan het einde een getal verwacht, zou ik niet op letters gaan matchen.)
Quote:
Notice: Undefined index: id in C:\wamp64\www\userlist.php on line 126
lijn 113 t/m 126
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
Options -Indexes
Options +FollowSymLinks
ErrorDocument 404 /index.php
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^(.*)$ index.php/?id=$1 [L]
</IfModule>
Options +FollowSymLinks
ErrorDocument 404 /index.php
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^(.*)$ index.php/?id=$1 [L]
</IfModule>
PHP:
Output als ik deze opvraag: http://localhost/phphulp/1
Gewijzigd op 27/12/2017 10:16:28 door Jan Koehoorn
Quote:
array (size=0)
empty
empty
dat krijg ik als antwoord
en als ik via rankinglist.php?id=2 ga dan krijg ik
Quote:
array (size=1)
'id' => string '2' (length=1)
'id' => string '2' (length=1)
Gewijzigd op 27/12/2017 18:34:58 door rick kem
Wat doe je precies om die output te krijgen?
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
Options -Indexes
Options +FollowSymLinks
ErrorDocument 404 /index.php
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^userlist/(.*)$ userlist.php?id=$1
</IfModule>
Options +FollowSymLinks
ErrorDocument 404 /index.php
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^userlist/(.*)$ userlist.php?id=$1
</IfModule>
dit is me httacces bestand
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
echo '<pre>';
var_dump($_GET);
echo '</pre>';
?>
<?php
$eachPage = 20;
if(isset($_GET['id'])){
if($_GET['id'] == '0'){
$page = 1;
}else{
$page = $_GET['id'];
}
}else{
$page = 1;
}
$calc = $eachPage * $page;
$start = $calc - $eachPage;
$sql = $connect->runQuery("SELECT * FROM users ORDER BY points DESC Limit $start, $eachPage");
if($connect->NumRows($sql) == 0){
?>
echo '<pre>';
var_dump($_GET);
echo '</pre>';
?>
<?php
$eachPage = 20;
if(isset($_GET['id'])){
if($_GET['id'] == '0'){
$page = 1;
}else{
$page = $_GET['id'];
}
}else{
$page = 1;
}
$calc = $eachPage * $page;
$start = $calc - $eachPage;
$sql = $connect->runQuery("SELECT * FROM users ORDER BY points DESC Limit $start, $eachPage");
if($connect->NumRows($sql) == 0){
?>
dit is wat ik wil, en dan aanroepen met site/userlist/1 of site/userlist/2
alleen werkt het niet, de output is zoals hierboven vermeld.
als ik site/userlist.php?id=1 doe, werkt het wel dus het probleem zal n de httaccess file zitten.
alvast wederom bedankt!
Gewijzigd op 27/12/2017 18:52:47 door rick kem
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
Options -Indexes
Options +FollowSymLinks
ErrorDocument 404 /index.php
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^userlist/(.*)$ userlist.php?id=$1
</IfModule>
Options +FollowSymLinks
ErrorDocument 404 /index.php
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^userlist/(.*)$ userlist.php?id=$1
</IfModule>
userlist.php:
Code (php)
Output:
Toevoeging op 27/12/2017 19:05:14:
Het is dus mogelijk, dat er een extra slash aan $_GET['id'] zit vastgeplakt, waardoor je query misschien niet werkt.
array (size=0)
empty
C:\wamp64\www\rankinglist.php:130:int 1
Dit is mijn output.
Heb het bestand inmiddels aangepast naar rankinglist lijn 115 tot 130 zijn die lijnen die je hierboven gaf.
Quote:
C:\wamp64\www\rankinglist.php:130:int 1
Quote:
RewriteRule ^userlist/(.*)$ userlist.php?id=$1
Zoek de verschillen. Kleine hint, userlist.php is niet het zelfde als rankinglist.php
Gewijzigd op 28/12/2017 08:46:25 door Jacco Engel
Jacco Engel op 28/12/2017 08:46:03:
Zoek de verschillen. Kleine hint, userlist.php is niet het zelfde als rankinglist.php
Quote:
C:\wamp64\www\rankinglist.php:130:int 1
Quote:
RewriteRule ^userlist/(.*)$ userlist.php?id=$1
Zoek de verschillen. Kleine hint, userlist.php is niet het zelfde als rankinglist.php
Dat weet ik, maar had al aangegeven dat ik de naam veranderd had naar rankinglist.
Toevoeging op 28/12/2017 21:08:00:
Helaas nog geen oplossing... iemand iets?
je zegt hier: herschrijf alles wat begint met userlist/ en waar eventueel nog wat achter staat,
tot userlist.php?id=X waarbij X is "alles wat na userlist/ stond"
Je wilt echter alleen de cijfers hebben, niet eventuele slashes. (en ook geen letters etc).
Als je zeker weet dat er hooguit 1 slash achter het getal stond en er ook zeker een getal stond en de optie "leeg" niet van toepassing is:
(/? maakt de / optioneel)
Als het getal ook kan ontbreken:
(* accepteert ook 0 cijfers, de + wil minimaal 1 cijfer)
Als er achter de / ook nog meer kan staan, zoals userlist/123/foo/bar
dan de $ weglaten.
(de $ gaf het einde van de string aan)
Als het id ook uit letters of andere tekens mag bestaan (maar niet uit een /):
probeer maar wat
ik heb even een andere apache server geinstalleerd, en daar werkt het wel meteen. raar maar bedankt voor de hulp!
Het verschil zal liggen in meegeladen modules (maar aangezien het wel een beetje werkte, zal mod_rewrite aanwezig zijn geweest)
of in iets mbt. de trailing slashes of een andere definitie van de document root (een / wel of niet aan het begin).
Op termijn is "dan installeer je Apache opnieuw" niet een optie, als de ene keer de url rewriting wel/niet werkt en de andere keer een of andere virutal hosts setting niet/wel.