beror på vilken server, serverspråk du kör.
Hur gör jag för att undvika filändelsen i URL'n? Ser det på flera sajter men vet inte riktigt hur jag ska fixa det själv. Tacksam för svar. :)
6 svar · 547 visningar · startad av web
Hur gör jag för att undvika filändelsen i URL'n? Ser det på flera sajter men vet inte riktigt hur jag ska fixa det själv. Tacksam för svar. :)
beror på vilken server, serverspråk du kör.
Det görs med mod_rewrite på Apache servrar, http://edrackham.com/apache/beginners-mod_rewrite-tutorial/
Det finns url rewriters till windows servrar också ex. ISAPI rewrite & IIS rewrite. Men de är jag mindre insatt i...
Om servern använder Apache kan du använda en sk .htaccess. Det är en fil vars filnamn ska börja med en punkt, observera det. Kan du inte döpa en fil till .htaccess lokalt så får du ladda upp den via ftp och sen döpa om den.
Så här borde din .htaccess se ut för just ditt exempel:
# Denna rad sätter på omskrivningsmotorn. Utan den funkar inte koden som följer!
RewriteEngine on
# Denna rad försäkrar dig om att bara URL'er som inte existerar skrivs om
RewriteCond %{REQUEST_FILENAME} !-f
# Skriv om URL'n
RewriteRule ^([^/]+)/([^/]+)$ /$1_$2.html
# betyder att reten av raden är en kommentar.
Rad nr 2 gör att om en fil med namnet du skriver i faktiskt existerar så laddas den istället.
Rad nr 3 är ett reguljärt uttryck som utför en ersättning.
^ matchar början av raden.
[^/] matchar alla tecken utom /
+ matchar 1 eller flera tecken
[^/]+ matchar således ett flera tecken som inte är / (Som ordlista i ditt fall, och senare i uttrycket, bil)
([^/]+) parenterna grupperar resultatet så att det kan användas vid ersättningen. ($1 och $2)
/ matchar tecknet /
/$1_$2.html sätter in matchningarna i resultatet.
Hoppas det är okej att jag lånar din tråd Web :)
Nitro: jag tycker ditt svar ger bra information, men kan du utveckla htaccess lite?
Är $-tecknet slutet på en rad?
Jag har även sett * användas, tex *$ eller (.*) - betyder asterixen "allting"?
Och parantesen, den behövs alltså för att sen kunna använda den i form av $1 osv? Eller måste det ingå ett plus eftersom du använder plus även i den andra parantesen?
[^/]: varför vill man matcha allt utom /? Är det om man har en lång virtuell sökväg, och man vill isolera varje virtuell undermapp?
Det är RegularExpressions Haider,
*$ kan du inte skriva eftersom * betyder minst 0 träffar, men 0 träffar av vadå?
. är vilket tecken som hellst(förutom \n)
http://www.regular-expressions.info/
sen har jag referens som Vide på wF har på webeye.nu (ibland fungera det inte att besöka sidan): http://voigt.se/sandbox/regexp/#referense
att använda paranteser är att du få en referens ($1 och $2)
^([^/]+)/([^/]+)$
bli: $1 och $2
exempel:
webForm/bil
Varför man kör [^/] är ju för det är ju det man är ute efter
Här finns en introduktion till ämnet erguljära uttryck. Jag kan också försöka lite här.
^ markerar början av en sträng. (Kan även ha en annan betydelse inom []-parenteser som du såg) $ betyder slutet av en sträng.
Uttrycket green matchar varje sträng som green förekommer i.
Uttrycket ^green matchar alltså strängar såsom green och green bananas men inteevergreen då den strängen inte börjar med green.
Uttrycket green$ matchar däremot evergreen och green
Uttrycket ^green$ matchar strängen green och inget annat.
All tecken som inte är kontrolltecken matchar precis det tecknet en gång. Sedan kan denna betydelse ändras av kvantifierare.
* matchar ett tecken eller deluttryck (uttryk inom parentes) 0, 1 eller flera gånger. * är nog det kontrolltecken som är lättast att missuppfatta för en nybörjare.
Exempel: gre*n matchar t ex grn, gren, green och greeeeeeen
? matchar ett tecken eller deluttryck 0 eller 1 gång.
Exempel: gre?n matchar grn och gren men inte green
+ matchar ett tecken elle deluttryck 1 eller flera gånger.
Exempel: gre*n matchar t ex gren, green och greeeeeeen
men inte grn.
Skulle du vilja matcha ett kontrolltecken i en sträng kan du så kallat escape:a det med \
T ex 5\+5 matchar strängen 5+5
Medan 5+5 inte skulle matcha 5+5 men däremot 55, 555, 5555 osv iom att 5+ matchar en eller flera femmor.
Vissa tecken är speciella i det att de fungerar som jokertecken av olika slag.
. betyder vadsomhelst. .* betyder således matcha vilken sträng som helst med 0 eller fler tecken. .+ matchar vilken sträng som helst med minst ett tecken.
[] matchar en lista med tecken. f[iue]l matchar, fil, ful och fel. Man kan även definiera intervall. Typexemplet på det är [a-zA-Z] som matchar en stor eller liten bokstav från det engelska alfabetet. Men man kan även göra mer avancerade matchningar som [a-ctx-z_4-7] som matchar något av dessa tecken: a,b,c,t,x,y,z,_,4,5,6 och 7
Att jag skriver [^/] beror på att jag föredrar att min kod är så entydig som möjligt. Att bara skriva t ex (.+)/(.+) skulle t ex tillåtata någon att skriva in 111/222/333 vilket skulle ladda sidan 111_222/333.html vilket man kanske inte vill ska vara möjligt.
Parenteser används som nämnts tidigare för att definiera grupper som kan användas för att få delsträngar. Men man kan också behandla ett uttryck inom parenteser som ett tecken, t ex matchar hi(ha)+hi inte hihi men väl hihahi, hihahahi och hihahahahahahahahahi.
Hoppas det klargjorde lite hur regular expressions fungerar. :)
Styrkan ligger sedan i att man kan bygga ihop delarna till ett större uttryck som gör avancerade saker.
h Södergran: Fixade till formateringen lite och fixade lite annat.
h Södergran 2: Jag inser att jag har pratat mycket om regex, men lite om .htaccess som sådant. Nåväl.