.htaccess RewriteRule vraagje

Pagina: 1
Acties:

  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 15-05 11:40
Ik rewrite mbv .htaccess een aantal urls die in de loop van de tijd in zoekmachines terecht zijn gekomen. (veel upgrades gedaan enzo)

Bijvoorbeeld:
code:
1
2
RewriteRule /topic_(.*).html /list_messages/$1 [R=301,L]
RewriteRule /(.*)-t([0-9]*)\.html(.*)$ /list_messages/$2 [R=301,L]


Dit werkt allemaal prima maar ik krijg het niet voor elkaar om een links als dit:
code:
1
http://forum.domein.nl/lofiversion/index.php?t12345.html

en
code:
1
http://forum.domein.nl/index.php?showtopic=12345&view=old

om te zetten naar:
code:
1
http://forum.domein.nl/list_messages/12345


Hoe ga ik dit doen :?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:17

Creepy

Tactical Espionage Splatterer

Wat heb je zelf al geprobeerd? Wat lukte daar niet mee?
Zie ook P&W FAQ - De "quickstart" zodat je een iets completere topicstart de volgende keer hebt ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 15-05 11:40
Creepy schreef op vrijdag 07 januari 2005 @ 11:08:
Wat heb je zelf al geprobeerd? Wat lukte daar niet mee?
Ik heb al vanalles geprobreerd maar ik ben niet zo bekwaam in het RegExpen :P

Bijvoorbeeld:
code:
1
RewriteRule ^/lofiversion/index.php\?t([0-9]*)\.html(.*)$ /list_messages/$1 [R=301,L]


Werkt niet, maar ik denk dat het probleem in de index.php? zit ....

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 17-02 19:31
nou ja, die ? escape je al met die \

Wat is de syntax voor de RewriteRule?

over het algemeen beginnen regexps met / en niet met een ^ (of eigenlijk maakt het voor sed niet uit WAT je seperator is, zolang het maar het eerste karakter is.. ik gebruik zelf vaak een : als seperator omwille van de leesbaarheid, maar dat is met sed).

code:
1
RewriteRule \/lofiversion\/index.php\?t([0-9]*)\.html(.*)$ \/list_messages\/$1


Hmmm, nu ik zo je regexp lees: ga die / ook eens escapen? Wellicht dat je regexp daar overstruikelt.......

(note to self: RewriteRule syntax opzoeken)

[edit]ok, nevermind, m'n \/ verhaal gaat niet zo op na het lezen van Apache RewriteRule docs


Ok, shameless copy'n'paste, maar heb je hier aan gedacht:
Note: Never forget that Pattern is applied to a complete URL in per-server configuration files. But in per-directory configuration files, the per-directory prefix (which always is the same for a specific directory!) is automatically removed for the pattern matching and automatically added after the substitution has been done. This feature is essential for many sorts of rewriting, because without this prefix stripping you have to match the parent directory which is not always possible.

There is one exception: If a substitution string starts with ``http://'' then the directory prefix will not be added and an external redirect or proxy throughput (if flag P is used!) is forced!
Note: To enable the rewriting engine for per-directory configuration files you need to set ``RewriteEngine On'' in these files and ``Options FollowSymLinks'' must be enabled. If your administrator has disabled override of FollowSymLinks for a user's directory, then you cannot use the rewriting engine. This restriction is needed for security reasons.
?

[ Voor 56% gewijzigd door cavey op 07-01-2005 11:41 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:17

Creepy

Tactical Espionage Splatterer

Narf schreef op vrijdag 07 januari 2005 @ 11:14:
[...]


Ik heb al vanalles geprobreerd maar ik ben niet zo bekwaam in het RegExpen :P

Bijvoorbeeld:
code:
1
RewriteRule ^/lofiversion/index.php\?t([0-9]*)\.html(.*)$ /list_messages/$1 [R=301,L]


Werkt niet, maar ik denk dat het probleem in de index.php? zit ....
Om te voorkomen dat we oplossing gaan geven die jij al geprobeert hebt zou het fijn zijn als je zou beschrijven wat je geprobeerd hebt ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 15-05 11:40
Ik heb nu dit in mijn .httacces staan:
code:
1
RewriteRule /(.*)showtopic\=([0-9]*)(.*)$ /list_messages/$2 [R=301,L]


En die werkt alleen als ik een URL gebruik zonder ?, dus
code:
1
http://forum.domein.nl/index.phpshowtopic=13838&view=old
werkt wel en
code:
1
http://forum.domein.nl/index.php?showtopic=13838&view=old
niet.

Dus het heeft te maken met de ? in de url, mijn .htaccess aanpassen naar
code:
1
RewriteRule /index.php\?showtopic\=([0-9]*)(.*)$ /list_messages/$1 [R=301,L]

of
code:
1
RewriteRule /index\.php\?showtopic\=([0-9]*)(.*)$ /list_messages/$1 [R=301,L]

heeft helaas ook geen positief resultaat.

[ Voor 10% gewijzigd door Narf109 op 07-01-2005 14:06 ]


  • Narf109
  • Registratie: Juli 2001
  • Laatst online: 15-05 11:40
't is gelukt, alles achter het vraagteken staat is een query en moet dus apart behandeld worden :Y)

Voor mensen met hetzelfde vraagstuk, dit is mijn oplossing:
code:
1
2
RewriteCond %{QUERY_STRING} ^(.*)showtopic=([0-9]*)(.*)$ [NC]
RewriteRule /index.php$ /list_messages/%2? [R=301,L]
Pagina: 1