PDA

Bekijk Volledige Versie : RewriteRule url -> $_GET



Jeroen Heijmans
03/03/10, 23:15
Hya,

Ik heb hetvolgende in .htaccess staan.

Options +FollowSymLinks
RewriteEngine on
RewriteRule pagina-(.*) ?page=$1

http://www.ff.fm/3/pagina-blah laadt http://www.ff.fm/3/?page=blah
Dit is dus wat ik wil.

Echter, ik wil dat hele 'pagina-' er niet bij.
http://www.ff.fm/3/blah zou dus http://www.ff.fm/3/?page=blah moeten laden.
Haal ik `pagina-' weg uit de RewriteRule dan werkt het niet.

Wat zie ik over het hoofd?

John Bokma
03/03/10, 23:45
Jeroen Heijmans <ffchat@gmail.com> writes:

> Hya,
>
> Ik heb hetvolgende in .htaccess staan.
>
> Options +FollowSymLinks
> RewriteEngine on
> RewriteRule pagina-(.*) ?page=$1
>
> http://www.ff.fm/3/pagina-blah laadt http://www.ff.fm/3/?page=blah
> Dit is dus wat ik wil.
>
> Echter, ik wil dat hele 'pagina-' er niet bij.
> http://www.ff.fm/3/blah zou dus http://www.ff.fm/3/?page=blah moeten laden.
> Haal ik `pagina-' weg uit de RewriteRule dan werkt het niet.
>
> Wat zie ik over het hoofd?

RewriteRule 3/(.+) ?page=$1

Uit mijn hoofd

Als 3 slechts een voorbeeld is, en je wilt het voor alles laten werken
als het maar een "subdir" is:

RewriteRule ^[^/]+/(.+) ?page=$1

Dwz. het begint met iets (maar geen /), gevolgt door een / gevolgt door
iets anders, ga dan naar page=ietsanders.

--
John Bokma j3b

Hacking & Hiking in Mexico - http://johnbokma.com/
http://castleamber.com/ - Perl & Python Development

John Bokma
03/03/10, 23:55
John Bokma <john@castleamber.com> writes:

> Jeroen Heijmans <ffchat@gmail.com> writes:
>
>> Hya,
>>
>> Ik heb hetvolgende in .htaccess staan.
>>
>> Options +FollowSymLinks
>> RewriteEngine on
>> RewriteRule pagina-(.*) ?page=$1
>>
>> http://www.ff.fm/3/pagina-blah laadt http://www.ff.fm/3/?page=blah
>> Dit is dus wat ik wil.
>>
>> Echter, ik wil dat hele 'pagina-' er niet bij.
>> http://www.ff.fm/3/blah zou dus http://www.ff.fm/3/?page=blah moeten laden.
>> Haal ik `pagina-' weg uit de RewriteRule dan werkt het niet.
>>
>> Wat zie ik over het hoofd?
>
> RewriteRule 3/(.+) ?page=$1
>
> Uit mijn hoofd
>
> Als 3 slechts een voorbeeld is, en je wilt het voor alles laten werken
> als het maar een "subdir" is:
>
> RewriteRule ^[^/]+/(.+) ?page=$1
>
> Dwz. het begint met iets (maar geen /), gevolgt door een / gevolgt door
> iets anders, ga dan naar page=ietsanders.

Wat wellicht ook werkt:

RewriteRule ([^/])+$ ?page=$1

Wellicht het makkelijkste. Dit pakt het ding achter de / en propt het in
$1

Wellicht wil je dit niet over je hele site, maar dan hoor ik het wel.

--
John Bokma j3b

Hacking & Hiking in Mexico - http://johnbokma.com/
http://castleamber.com/ - Perl & Python Development

Jeroen Heijmans
04/03/10, 18:05
On Wed, 03 Mar 2010 16:45:55 -0600, John Bokma wrote:

> John Bokma <john@castleamber.com> writes:
>
>> Jeroen Heijmans <ffchat@gmail.com> writes:
>>
>>> Hya,
>>>
>>> Ik heb hetvolgende in .htaccess staan.
>>>
>>> Options +FollowSymLinks
>>> RewriteEngine on
>>> RewriteRule pagina-(.*) ?page=$1
>>>
>>> http://www.ff.fm/3/pagina-blah laadt http://www.ff.fm/3/?page=blah Dit
>>> is dus wat ik wil.
>>>
>>> Echter, ik wil dat hele 'pagina-' er niet bij. http://www.ff.fm/3/blah
>>> zou dus http://www.ff.fm/3/?page=blah moeten laden. Haal ik `pagina-'
>>> weg uit de RewriteRule dan werkt het niet.
>>>
>>> Wat zie ik over het hoofd?
>>
>> RewriteRule 3/(.+) ?page=$1
>>
>> Uit mijn hoofd
>>
>> Als 3 slechts een voorbeeld is, en je wilt het voor alles laten werken
>> als het maar een "subdir" is:
>>
>> RewriteRule ^[^/]+/(.+) ?page=$1
>>
>> Dwz. het begint met iets (maar geen /), gevolgt door een / gevolgt door
>> iets anders, ga dan naar page=ietsanders.
>
> Wat wellicht ook werkt:
>
> RewriteRule ([^/])+$ ?page=$1
>
> Wellicht het makkelijkste. Dit pakt het ding achter de / en propt het in
> $1
>
> Wellicht wil je dit niet over je hele site, maar dan hoor ik het wel.

Ik heb het even verplaatst naar http://www.ff.fm/.

Misschien kan het niet hoor :)
Ik wil namelijk directories zoals http://www.ff.fm/vmoo/ kunnen blijven
gebruiken. Ik wil ook bestanden zoas http://www.ff.fm/scripts/screen.css
kunnen aanroepen :) Bij jouw voorbeeld kon dat niet meer ;)

Het gaat maar om een paar bestanden. Misschien dat ik deze maar met de
hand ga invoeren.

Ik heb in PHP dit staan:
<?php
if(isset($_GET['page'])) {
switch($_GET['page']) {
case 'article1':
$page = 'article1';
break;
case 'article2':
$page = 'article2';
break;
case 'article3';
$page = 'article3';
break;
case 'article4';
$page = 'article4';
break;
default:
$page = 'article9';
}
} else {
$page = 'article8';
}
?>

Dan zou ik die termen ook gewoon moeten kunnen gebruiken bij de
RewriteRule.

RewriteRule ^article1$ ?page=article1
enz.

Natuurlijk wordt die naam nog aangepast :D

John Bokma
04/03/10, 18:55
Jeroen Heijmans <ffchat@gmail.com> writes:

> On Wed, 03 Mar 2010 16:45:55 -0600, John Bokma wrote:
>
>> John Bokma <john@castleamber.com> writes:
>>
>>> Jeroen Heijmans <ffchat@gmail.com> writes:
>>>
>>>> Hya,
>>>>
>>>> Ik heb hetvolgende in .htaccess staan.
>>>>
>>>> Options +FollowSymLinks
>>>> RewriteEngine on
>>>> RewriteRule pagina-(.*) ?page=$1
>>>>
>>>> http://www.ff.fm/3/pagina-blah laadt http://www.ff.fm/3/?page=blah Dit
>>>> is dus wat ik wil.
>>>>
>>>> Echter, ik wil dat hele 'pagina-' er niet bij. http://www.ff.fm/3/blah
>>>> zou dus http://www.ff.fm/3/?page=blah moeten laden. Haal ik `pagina-'
>>>> weg uit de RewriteRule dan werkt het niet.
>>>>
>>>> Wat zie ik over het hoofd?
>>>
>>> RewriteRule 3/(.+) ?page=$1
>>>
>>> Uit mijn hoofd
>>>
>>> Als 3 slechts een voorbeeld is, en je wilt het voor alles laten werken
>>> als het maar een "subdir" is:
>>>
>>> RewriteRule ^[^/]+/(.+) ?page=$1
>>>
>>> Dwz. het begint met iets (maar geen /), gevolgt door een / gevolgt door
>>> iets anders, ga dan naar page=ietsanders.
>>
>> Wat wellicht ook werkt:
>>
>> RewriteRule ([^/])+$ ?page=$1
>>
>> Wellicht het makkelijkste. Dit pakt het ding achter de / en propt het in
>> $1
>>
>> Wellicht wil je dit niet over je hele site, maar dan hoor ik het wel.
>
> Ik heb het even verplaatst naar http://www.ff.fm/.
>
> Misschien kan het niet hoor :)
> Ik wil namelijk directories zoals http://www.ff.fm/vmoo/ kunnen blijven
> gebruiken. Ik wil ook bestanden zoas http://www.ff.fm/scripts/screen.css
> kunnen aanroepen :) Bij jouw voorbeeld kon dat niet meer ;)

Klopt, wat je kan doen is: welke tekens zijn toegestaan. Op dit moment
lijken dat letters en cijfers te zijn, dus we maken er van:

RewriteRule /([a-z0-9])+$ ?page=$1

Dwz, als er een / is, gevolgd door een of meer letters/cijfers, doe dan
het ding. Die / aan het begin beperkt het wel tot "subdirectories", dus:

http://example.com/foo/bar

zal werken

http://example.com/foo

niet.

Dit is op te lossen door of de regexp complexer te maken, of door een
extra rule toe te voegen:

RewriteRule ^([a-z0-9])+$ ?page=$1

> Het gaat maar om een paar bestanden. Misschien dat ik deze maar met de
> hand ga invoeren.

Wat je dan weer kan doen is:

RewriteRule (article1|article2|article3....)$ ?page=$1

Dit is vrij breed, omdat er geen beperking(en) voor de lijst met
alternatieven staat, dus:

http://example.com/foo/article1
http://example.com/article1
http://example.com/foooooarticle1

proberen allemaal die interne redirect te doen.

Als het altijd in een "subdir" staat kan je dat oplossen door:

RewriteRule /(article1|article2|article3....)$ ?page=$1

te doen.

Overigens, als die namen inderdaad gelijk blijven, gevolgt door een
volgnummer dan is dat weer korter te schrijven door:

RewriteRule /(article[1-9])$ ?page=$1

te gebruiken (als er maar 9 zijn)

> RewriteRule ^article1$ ?page=article1
> enz.
>
> Natuurlijk wordt die naam nog aangepast :D

Je zou dus dan:

RewriteRule ^(foo|bar|baz)$ ?page=$1

kunnen gebruiken.

() = group and capture
| = alternate

--
John Bokma j3b

Hacking & Hiking in Mexico - http://johnbokma.com/
http://castleamber.com/ - Perl & Python Development

Jeroen Heijmans
04/03/10, 19:35
On Thu, 04 Mar 2010 11:47:07 -0600, John Bokma wrote:

> Jeroen Heijmans <ffchat@gmail.com> writes:
>
>> On Wed, 03 Mar 2010 16:45:55 -0600, John Bokma wrote:
>>
>>> John Bokma <john@castleamber.com> writes:
>>>
>>>> Jeroen Heijmans <ffchat@gmail.com> writes:
>>>>
>>>>> Hya,
>>>>>
>>>>> Ik heb hetvolgende in .htaccess staan.
>>>>>
>>>>> Options +FollowSymLinks
>>>>> RewriteEngine on
>>>>> RewriteRule pagina-(.*) ?page=$1
>>>>>
>>>>> http://www.ff.fm/3/pagina-blah laadt http://www.ff.fm/3/?page=blah
>>>>> Dit is dus wat ik wil.
>>>>>
>>>>> Echter, ik wil dat hele 'pagina-' er niet bij.
>>>>> http://www.ff.fm/3/blah zou dus http://www.ff.fm/3/?page=blah moeten
>>>>> laden. Haal ik `pagina-' weg uit de RewriteRule dan werkt het niet.
>>>>>
>>>>> Wat zie ik over het hoofd?
>>>>
>>>> RewriteRule 3/(.+) ?page=$1
>>>>
>>>> Uit mijn hoofd
>>>>
>>>> Als 3 slechts een voorbeeld is, en je wilt het voor alles laten
>>>> werken als het maar een "subdir" is:
>>>>
>>>> RewriteRule ^[^/]+/(.+) ?page=$1
>>>>
>>>> Dwz. het begint met iets (maar geen /), gevolgt door een / gevolgt
>>>> door iets anders, ga dan naar page=ietsanders.
>>>
>>> Wat wellicht ook werkt:
>>>
>>> RewriteRule ([^/])+$ ?page=$1
>>>
>>> Wellicht het makkelijkste. Dit pakt het ding achter de / en propt het
>>> in $1
>>>
>>> Wellicht wil je dit niet over je hele site, maar dan hoor ik het wel.
>>
>> Ik heb het even verplaatst naar http://www.ff.fm/.
>>
>> Misschien kan het niet hoor :)
>> Ik wil namelijk directories zoals http://www.ff.fm/vmoo/ kunnen blijven
>> gebruiken. Ik wil ook bestanden zoas
>> http://www.ff.fm/scripts/screen.css kunnen aanroepen :) Bij jouw
>> voorbeeld kon dat niet meer ;)
>

Ik neig zelf toch naar deze regel.

> RewriteRule ^([a-z0-9])+$ ?page=$1

Het 'leuke' is dat deze een vreemd resultaat geeft.
Ik laat $page ook nog echo'en in de pagina om te vergelijken en ik krijg
alleen maar de laatste letter terug.

>> Natuurlijk wordt die naam nog aangepast :D
>
> Je zou dus dan:
> RewriteRule ^(foo|bar|baz)$ ?page=$1
>

*grin* die had ik wel kunnen vinden (en werkend gekregen).

John Bokma
04/03/10, 20:55
Jeroen Heijmans <ffchat@gmail.com> writes:

> On Thu, 04 Mar 2010 11:47:07 -0600, John Bokma wrote:

[..]

> Ik neig zelf toch naar deze regel.
>
>> RewriteRule ^([a-z0-9])+$ ?page=$1
>
> Het 'leuke' is dat deze een vreemd resultaat geeft.
> Ik laat $page ook nog echo'en in de pagina om te vergelijken en ik krijg
> alleen maar de laatste letter terug.

Klopt, mijn fout, dit had moeten zijn:

RewriteRule ^([a-z0-9]+)$ ?page=$1

>>> Natuurlijk wordt die naam nog aangepast :D
>>
>> Je zou dus dan:
>> RewriteRule ^(foo|bar|baz)$ ?page=$1
>
> *grin* die had ik wel kunnen vinden (en werkend gekregen).

Ja, die is het makkelijkste bij een beperkt aantal paginas. Minste kans
op false positives.

--
John Bokma j3b

Hacking & Hiking in Mexico - http://johnbokma.com/
http://castleamber.com/ - Perl & Python Development