WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Mod_rewrite, ett smärre dilemma.. (https://www.wn.se/forum/showthread.php?t=8529)

Emil Svensson 2005-06-17 19:43

Efter att ha trilskats en del med mod_rewrite har jag nästan fått till det som jag vill ha det.

Så här ser min .htaccess ut:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !^(.*)\.(.*)$
RewriteCond %{REQUEST_URI} !^(.*)/$
RewriteRule ^(.*)$ %{REQUEST_URI}.php

Detta leder till att jag kan använda urls utan filändelse, "hej" läser innehållet från "hej.php".

Några smärre saker återstår att årgärda:

1. Om man skriver "katalognamn", så försöker den hitta katalognamn.php. Den borde även kolla om katalogen "katalognamn" finns.

2. Det hade varit trevligt om man kunde ställa in nån sorts rangordning så att den först kollar om "hej.php" finns, sen om "hej.htm" finns o.s.v om man anger "hej" utan filändelse.. Hur gör man det?

3. Finns det något problem med det här jag inte tänkt på?

Rasmus 2005-06-17 20:09

Jag har svårt att tro att det ska gå om man inte anger / (slash) efter url:en ifall det är en mapp man ska till. Ett alternativ kan vu vara att göra egna regler för dina mappar, rör det sig inte om en massa mappar är ju detta inte så farligt att göra manuellt.

Emil Svensson 2005-06-17 20:35

Okej, ja det är inte så viktigt det där med att kunna skriva urls till mappar utan / i och för sig. Fast jag tror Loopia har det så. Deras servrar tror jag också automatiskt kollar efter rätt filändelse.

FredrikMH 2005-06-17 21:40

bara jag som tycker det är bättre att peka allting på index.php och låta index.php infoga de filer som behövs? Du får mer kontroll på det och allting osm du vill komma åt går att fixa. Men det kanske innebär mycket jobb.

Emil Svensson 2005-06-18 09:02

Fredrik, jag vet inte hur man åstadkommer det du pratar om. Har inte programmerat nån php att tala om, men använder includes och lite småscript jag hittat lite varstans. Kanske nåt man borde kolla på. Fast jag börjar bli lite trött på att krångla med det tekniska, vill ju komma igång snart :-)

Jonas 2005-06-18 09:06

Varför inte döpa katalogerna till <katalog>.php istället? :D

grazzy 2005-06-18 10:53

Du kan kolla om en katalog finns genom att använda flaggan -d till RewriteCond (eller fil med -f).

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} -d

eller liknande.

Emil Svensson 2005-06-18 10:55

Hehe, njaaaa Jonas.. Fasen, känns som en imperfekt lösning det här med mod_rewrite ändå.. Kanske lika bra att köra med vanliga .php i urlsen så vet man i alla fall vad man får även om det också är imperfekt. Vad är era preferenser, föredrar ni att ha med eller utan filnamn?

Edit: Grazzy, det där verkar intressant! Letade lite efter nåt sånt igår i den där mod_rewritemanualen men missade det.

Man vill ju helst att den i första hand ska ta en fil med samma namn som katalogen om det finns. Det kan man tydligen kolla med '-f'. Undrar om det funkar när filen i själva verket har en .php filändelse.. Men det märker man väl.

Det som återstår då förutom detta är väl att kunna ha alternativa filändelser om det inte skulle finnas en .php, t.ex .htm eller vad som.

Emil Svensson 2005-06-18 11:39

Förresten.. Det borde ju vara bäst att köra ett Rewritecond som kollar om %{REQUEST_URI}.php är en fil (Eller om man var tvungen att lägga till document_root framför som du skrev Grazzy) och i såna fall ska urlen rewritas till %{REQUEST_URL}.php

Om detta funkar måste det ju vara den bästa lösningen och då är det också enkelt att lägga till samma sak för andra filändelser. Känns inte som att det borde bli några oväntade negativa konsekvenser av detta.

Emil Svensson 2005-06-18 12:12

Det verkar funka med detta:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ %{REQUEST_URI}.php

Vill jag att den även ska kolla andra filändelser behöver jag bara kopiera de två sista raderna och byta .php mot nåt annat. Jag känner mig som en leet haxxor. Om det är nåt jag inte tänkt på så att detta inte är nån bra lösning så säg till.

En annan sak jag funderade på.. Om ett webhotell har register_globals "off", kan man fortfarande komma åt variablerna DOCUMENT_ROOT m.fl. i htaccess utan att ändra nåt? Man borde väl kunna det antar jag eftersom register_globals ligger i phpcore och inte har nåt med servern att göra direkt. Man har typ alltid tillgång till dessa variabler i htaccess antar jag om webbhotellet överhuvudtaget tillåter ändringar i htaccess?


Eventuellt borde man göra nån rewrite så att om nån skriver in .php så borde han bli redirectat till filnamnet utan .php. Det är ju aldrig bra att ha samma innehåll på 2 olika urls om man tänker på SEO. Fast det är ju inget problem att göra det..


Alla tider är GMT +2. Klockan är nu 23:41.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson