Permalänk

hjälp med .htaccess

behöver lite hjälp med mod_rewrite:

jag har skapat .htaccess-filen men har ingen aning om vad jag skriva i den. har försökt att klistra in ett antal koder (från sidor på nätet) och modifierat de men jag får den inte att fungera.

Jag vill få bort ".html" från adressen nedan:

Vad ska det stå i htaccess-filen? kan jag ha fler regller för sidor som ligger i samma html-mapp, dvs. contactframedef.html och guestbookframedef.html?

ska filen vara i html-katalogen eller i roten?

Tack på förhand

Permalänk
Medlem

htaccess filen behandlar endast den katalogen den befinner sig i (som default). För generella ändringar rekommenderar jag att du gör rewrites i site-filen.
Först kollar vi så att vi har modulen som sköter rewrite

<IfModule mod_rewrite.c> ...RewriteRules... </IfModule>

Sedan aktiverar vi den

RewriteEngine On

RewriteRule är ganska enkel, det som krånglar till det för de flesta är regular expressions som den använder sig av.
Men om vi t.ex. vill skriva om "hej" till "sidor/hej.htm" så skriver vi bara

RewriteRule hej sidor/hej.htm

Om vi vill att den inte skall göra skillnad på stora och små bokstäver använder vi oss av "[NC]":

RewriteRule hej sidor/hej.htm [NC]

Problemet är nu att den ersätter alla "hej" med "sidor/hej.htm" i adressen. Ofta vill du kanske bara ersätta det sista i adressen, det är nu regular expressions kommer in. "$" matchar enbart slutet, så om vi vill att "www.adress.se/heja" inte blir "www.adress.se/sidor/hej.htma" så skriver vi så här:

RewriteRule hej$ sidor/hej.htm [NC]

Men nu matchar den ju "www.adress.se/ohej" som "www.adress.se/osidor/hej.htm"
"ohej" är ju något annat, då använder vi oss av "^" som matchar början, alltså:

RewriteRule ^hej$ sidor/hej.htm [NC]

exempel:

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^hej$ sidor/hej.htm [NC] </IfModule>

Visa signatur

citera!

Permalänk

okej... då ska .htaccess filen vara i html-mappen (där alla html-finns)

men grejen är att jag vill tabort filändelsen ".html" helt och hållet, inte omformulera sökvägen.
ska det alltså stå såhär i filen?

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^frameframedef.html$ frame </IfModule>

så här vill jag göra:

ska istället vara:

Permalänk
Medlem

det låter bra...
du kan använda $1 för att få den första klassen ( t.ex. [.*] ) som ersattes, $2 för den andra o.s.v.
Således kan du alltså använda dig av det som ersattes i adressen med det som du vill det ska ersättas med.
På så sätt kan du göra generella regler.

Ta tillfället i akt och läsa på om regular expression! Det är smidigt att kunna.
Jag brukar använda mig av: Regular-Expressions.info - Regex Tutorial, Examples and Reference - Regexp Patterns när jag behöver kolla upp syntaxen.

Visa signatur

citera!

Permalänk

nop, inga förändringar sker...

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^homeframedef.html$1 frame </IfModule>

nånting stämmer inte

Permalänk
Medlem

eeeh... nja. $1 är första klassen, alltså inom [] som ersätts.

Prova att gör en enkel rewrite, så enkel du bara kan.. typ

RewriteRule abc dbe

och se om den fungerar... sedan bygger du vidare därifrån.
Om den inte skulle fugnera så kolla att du har modulen o.s.v.

Visa signatur

citera!

Permalänk
Medlem
Skrivet av sagittarius:

okej... då ska .htaccess filen vara i html-mappen (där alla html-finns)

men grejen är att jag vill tabort filändelsen ".html" helt och hållet, inte omformulera sökvägen.
ska det alltså stå såhär i filen?

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^frameframedef.html$ frame </IfModule>

så här vill jag göra:

ska istället vara:

Du skriver det du vill matcha -> den riktiga filen (eller något vidare uttryck), borde alltså vara som följer:

RewriteRule ^html/frame$ html/frameframedef.html RewriteRule ^html/([^/]+)/?$ html/$1.html

Den andra regeln borde matcha * mot *.html.

Visa signatur

WS: Antec P182B | FSP Aurum 500W | Asus P8Z77-V PRO | i5 3570k | 16GB DDR3 | Intel 320 80GB SSD | HDD 5TB | Asus Xonar DX | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 3 model B+ | 1GB RAM | HDD 750GB | Arch Linux (armv7h)