[htaccess] Samenstelling topic url

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Hey,

Op dit moment ben ik bezig met het ontwikkelen van een forum in php / mysql. Nu wil ik gebruik maken van de rewrite engine van htaccess.

Nu kan een topic url de volgende waarden bevatten:

topic_id (vereist)
quote (optioneel)
quote_id (optioneel)
pagina_nummering (optioneel -> kan ook 'last' zijn)
trefwoorden (optioneel -> om woorden te kunnen "hightlighten")

Nu zal dit dus de opzet worden van een volwaardige topic (zonder quote optie) url:

www.domein.nl/forum/topic/23/2/trefwoord1,trefwoord2

Nu heb ik in htacces het volgende:

RewriteRule ^forum/topic/([0-9]+)/quote/([0-9]+)$ index.php?page=topic&id=$1&quote=$2 [L]
RewriteRule ^forum/topic/wijzigen/([0-9]+)$ index.php?page=topic&wijzigen=$1 [L]
RewriteRule ^forum/topic/([0-9]+)/last$ index.php?page=topic&id=$1&nav=last [L]
RewriteRule ^forum/topic/([0-9]+)/([0-9]+)$ index.php?page=topic&id=$1&nav=$2 [L]
RewriteRule ^forum/topic/([0-9]+)$ index.php?page=topic&id=$1 [L]

Een stemmetje in mij zegt dat dit vele malen makkelijker kan. Op GOT zie ik dat een topic url is opgebouwd met deze waarden:

www.domein.nl/forum/list_...0///trefwoord1,trefwoord2 .. etc.

Nu is het hier op GOT dus mogelijk dat er geen variabelen (zoals paginanummering) zijn ingevuld tussen een aantal slashes in bovenstaande url. Ik heb het gevoel dat dit d.m.v. één rewriterule bereikt kan worden.

Ik vraag mij dan ook af hoe de rewriterule van GOT er uit ziet ten aanzien van het weergeven van een topic.

[ Voor 3% gewijzigd door radem205 op 06-04-2010 22:49 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:18

crisp

Devver

Pixelated

Ik vraag mij dan ook af hoe de rewriterule van GOT er uit ziet ten aanzien van het weergeven van een topic.
Wij gebruiken multiviews ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Dus hier op GOT gebruiken jullie multiviews in combinatie met een php script waarbij de slashes worden geëxplode en de waarden aan een variabele worden gekoppeld?

Zoiets als:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?

$dir = 0; 

$vars = substr($_SERVER['REQUEST_URI'], 1); 
$vars = explode("/", $vars); 

for($i = $dir; $i < count($vars); $i++) { 
    $key = $vars[$i]; 
    $i++; 
    $inhoud = $vars[$i]; 
    $urls[$key] = $inhoud; 
} 

?>

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:18

crisp

Devver

Pixelated

radem205 schreef op dinsdag 06 april 2010 @ 22:57:
Dus hier op GOT gebruiken jullie multiviews in combinatie met een php script waarbij de slashes worden geëxplode en de waarden aan een variabele worden gekoppeld?
Inderdaad :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Zo klaar als een klontje dus :). Bedankt voor de subtiele reacties !

Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 00:54
Interessante optie crisp. Ik heb al wat zitten prutsen met .htaccess files maken voor een aantal links in een site die ik beheer. Ik denk al wel dat het er op neer gaat komen dat alle pagina's er in moeten kunnen, dan lijken multiviews me een beter idee.
radem205 schreef op dinsdag 06 april 2010 @ 22:57:
Dus hier op GOT gebruiken jullie multiviews in combinatie met een php script waarbij de slashes worden geëxplode en de waarden aan een variabele worden gekoppeld?

Zoiets als:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?

$dir = 0; 

$vars = substr($_SERVER['REQUEST_URI'], 1); 
$vars = explode("/", $vars); 

for($i = $dir; $i < count($vars); $i++) { 
    $key = $vars[$i]; 
    $i++; 
    $inhoud = $vars[$i]; 
    $urls[$key] = $inhoud; 
} 

?>
Ik snap niet helemaal wat het nut is van die for loop. Naast het feit dat je zo te zien alles naar een nieuwe array gooit ga je met 2 maal $i++ per iteratie ook niet uitkomen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
jip_86 schreef op woensdag 07 april 2010 @ 00:32:
Ik denk al wel dat het er op neer gaat komen dat alle pagina's er in moeten kunnen, dan lijken multiviews me een beter idee.
Wat versta je onder "dat alle pagina's er in moeten kunnen"? Als je 1 PHP hebt die de url uit elkaar pluist en vervolgens de juiste zaken aantrapt om hun werk te gaan doen kun je het zo gek maken als je wil. Dat is ontelbaar keren makkelijker dan multiviews: 1 rewriterule et voila; de rest wordt afgehandeld door code. Dat is vele malen beter leesbaar en je kunt de gekste bokkensprongen maken die in .htaccess bestanden verdomd lastig, niet of niet goed te vangen zijn.

[ Voor 17% gewijzigd door RobIII op 07-04-2010 00:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
jip_86 schreef op woensdag 07 april 2010 @ 00:32:
Interessante optie crisp. Ik heb al wat zitten prutsen met .htaccess files maken voor een aantal links in een site die ik beheer. Ik denk al wel dat het er op neer gaat komen dat alle pagina's er in moeten kunnen, dan lijken multiviews me een beter idee.


[...]

Ik snap niet helemaal wat het nut is van die for loop. Naast het feit dat je zo te zien alles naar een nieuwe array gooit ga je met 2 maal $i++ per iteratie ook niet uitkomen.
Bij multi-view zijn de URLs opgebouwd als http://www.example.com/key1/value1/key2/value2/key3/value3

Vandaar dat je tweemaal per iteratie een $i++ moet doen. De eerste $i++ geeft de key, de tweede de value.

Dat is dus anders dan een URL als http://www.example.com/option1/option2/option3

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:18

crisp

Devver

Pixelated

Dat hoeft helemaal niet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$actionvars = array(
    'list_topics' => array('forumid','days','start'),
    'list_messages' => array('topicid','offset','limit','keywords','filter_keywords','resumetimestamp')
);

$values = explode('/', substr($_SERVER['PATH_INFO'], 1));
$action = array_shift($values);

$data = array();
if (isset($actionvars[$action]))
{
    for ($i = 0; $i < count($values); $i++)
    {
        if (isset($actionvars[$action][$i]))
            $data[$actionvars[$action][$i]] = $values[$i];
        else
            break;
    }
}

var_dump($action);
var_dump($data);

:)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Tjonge jonge, het leven kan zo veel makkelijker zijn als iedereen het inzicht zal hebben die de makers van GOT hebben (gehad) :p.
Bedankt voor de reacties, het is allemaal erg duidelijk zo.

Maar nu nog even een inhoudelijke vraag: Wanneer bijvoorbeeld de offset en limit hier op GOT niet is ingevuld, maar de keywords wel in de url staan dan krijg je dus een url met 3 slahes ( ///keyword1,keyword2 ).
Hoe kan je zorgen dat tijdens het exploden de slashes als lege variabelen worden gezien zodat in de array 'keyword1,keyword2' wel bij de waarde 'keywords' wordt geplaatst in de array.
Want nu worden de slashes teruggebracht naar een enkele slash en komen de keywords bij de varaiabele 'limit' te staan.

[ Voor 58% gewijzigd door radem205 op 07-04-2010 09:52 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-07 10:40

Janoz

Moderator Devschuur®

!litemod

Persoonlijk zou ik trouwens de keywords niet in het pad, maar echt als parameters opnemen. De keywords geven eigenlijk enkel accenten aan op de pagina. De content zelf wordt niet wezelijk anders dus hoeft imho ook niet ineens als een andere pagina gezien te worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Janoz schreef op woensdag 07 april 2010 @ 10:03:
Persoonlijk zou ik trouwens de keywords niet in het pad, maar echt als parameters opnemen. De keywords geven eigenlijk enkel accenten aan op de pagina. De content zelf wordt niet wezelijk anders dus hoeft imho ook niet ineens als een andere pagina gezien te worden.
Kan je dat nader toelichten, want wat bedoel je met "niet in het pad, maar echt als parameters opnemen"?
Bedoel je dit: www.domein.nl/topic/12?keywords=trefwoord,trefwoord ?

[ Voor 6% gewijzigd door radem205 op 07-04-2010 10:07 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:18

crisp

Devver

Pixelated

radem205 schreef op woensdag 07 april 2010 @ 09:41:
[...]
Want nu worden de slashes teruggebracht naar een enkele slash en komen de keywords bij de varaiabele 'limit' te staan.
Da's een apache2-probleempje; dat kan je oplossen door PATH_INFO uit $_SERVER['REQUEST_URI'] te trekken.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 00:54
RobIII schreef op woensdag 07 april 2010 @ 00:34:
[...]

Wat versta je onder "dat alle pagina's er in moeten kunnen"? Als je 1 PHP hebt die de url uit elkaar pluist en vervolgens de juiste zaken aantrapt om hun werk te gaan doen kun je het zo gek maken als je wil. Dat is ontelbaar keren makkelijker dan multiviews: 1 rewriterule et voila; de rest wordt afgehandeld door code. Dat is vele malen beter leesbaar en je kunt de gekste bokkensprongen maken die in .htaccess bestanden verdomd lastig, niet of niet goed te vangen zijn.
De site hier waar het om gaat heeft een stuk of 10 subsites waarop de informatie van een geleding/subgroep staat. Er word nu over geklaagd dat de structuur ingewikkeld is en die subsites slecht te bereiken zijn. Onhandige structuur die achteraf gewoon te veel klikken kost om doorheen te navigeren.

Een van de ideeën die geopperd was om die subsites bereikbaar te maken via www.url.nl/$geledingnaam ipv www.url.nl/index.php?ContentID=130, lijkt eenvoudig maar kost je drie keer klikken om er te komen.

Nu is het natuurlijk al te voorzien en, en zeker ook mooier, om bijvoorbeeld pagina's binnen die subsite zo te gaan verwerkern. Bijv www.url.nl/$geledingnaam/fotos ipv www.url.nl/index.php?ContentID=130&PaginaID=130

Ik ben er zelf nog niet helemaal over uit. Veel ingewikkelder als dit zal het niet worden en als er eenmaal zo'n subsite is zal die ook niet heel snel verdwijnen bijvoorbeeld.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-07 10:40

Janoz

Moderator Devschuur®

!litemod

Ja, dat bedoel ik. Het wisselen van topic ID of pagina geeft daadwerkelijk andere content. De trefwoorden passen eigenlijk alleen de view aan. De content blijft exact hetzelfde. Als je kijkt naar de beweegredenen van multiview achtige technieken dan is dat over het algemeen om er voor te zorgen dat verschillende paden worden gebruikt voor verschillende content en dus eigenlijk niet verschillende views van dezelfde content. Los daarvan levert het opleveren van dezelfde content via verschillende urls vaak strafpunten op bij de pagerank.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1