I been away since 1945
Corsair TX 650W | ASRock P67 Extreme 4 | Intel Core i5 2500K 3,3GHZ | Corsair 2x4GB DDR3 | Gigabyte GeForce GTX 560 Ti OC 1GB | Corsair SSD Force Series 60GB
Hej, jag hoppas att det finns någon som kan hjälpa mig med det här så blir jag ytters tacksam.
Jag har en webbsida som ligger på Loopias webbhotell (Apache, PHP) där strukturen bygger kring flera språk. Vilket språk som är valt anges i adressfältet på följande sätt:
http://min.sida.se/en/ eller http://min.sida.se/sv/
Resten av sidan struktureras i underkataloger, t.ex: http://min.sida.se/sv/kategori/
Jag har lyckats lösa detta i .htaccess filen på så sätt att adressen skrivs om till GET-variabler. Dock inget som syns på användarsidan. Detta innebär att adressen http://min.sida.se/en/kategori/sida/ på serversidan blir http://min.sida.se/index.php?lang=en&category=kategori&page=s....
Ja, det fungerar som jag vill att det ska fungera men det är några delar i lösningen som fortfarande fattas. Här är mina problem:
1. Adressen måste alltid avslutas med en slash (/). Om inte blir det ett 404-error.
2. Det går fortfarande ange absoluta adresser till filer på server. T.ex: http://min.sida.se/mapp/fil.php hämtar den fysiska filen. Antar att detta felet och föregående beror på samma fel.
3. Jag vill inte att någon fil eller mapp överhuvudtaget ska gå att hämta för användaren. Dock med undantag för några filer och mappar (index.php, image.php, flash.php, style.css, script.js, tinymce/, etc.). Går det att få till det på något enkelt sätt?
Den .htaccess fil jag har idag fungerar som sagt men jag känner att jag skrivit ihop den utan att egentligen veta vad allt i den innebär. Så här ser den ut idag:
php_flag display_errors on
php_flag display_startup_errors on
php_value error_reporting 2047
Options +FollowSymlinks
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteRule ^image.php([^/]+)$ $0 [L]
RewriteRule ^flash.php([^/]+)$ $0 [L]
RewriteRule ^([^/]+)/$ /index.php?lang=$1 [NC]
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?lang=$1&category=$2 [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /index.php?lang=$1&category=$2&page=$3 [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?lang=$1&category=$2&page=$3&page2=$4 [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /index.php?lang=$1&category=$2&page=$3&page2=$4&page3=$5 [NC]
image.php och flash.php använder jag mig av för att hämta bilder istället för att länka till den fysiska bilden. En bildlänk kan se ut så här: http://min.sida.se/image.php?id=45
Jag har försökt att läsa guider på internet men alla säger olika och när jag försöker skriva egna regexps blir det bara fel.
Tack på svar.
I been away since 1945
Corsair TX 650W | ASRock P67 Extreme 4 | Intel Core i5 2500K 3,3GHZ | Corsair 2x4GB DDR3 | Gigabyte GeForce GTX 560 Ti OC 1GB | Corsair SSD Force Series 60GB
Ett tips kan vara att istället för att via RewriteRule dela upp adressen i språk, kategori o.s.v., så låter du allt samlas i en $_GET variabel. Sedan delar du upp det i de olika delarna med hjälp av PHP istället. Reg.exp. är bara onödigt krångligt när du inte vet vad du håller på med.
Exempelvis om du går in på
http://min.sida.se/en/kategori/underkategori
så skickas du till
http://min.sida.se/index.php?all=en/kategori/underkategori
Sedan kör du exempelvis en explode("/", $_GET['all'])
Edit:
Du kan göra det ännu simplare:
RewriteRule . index.php
$_SERVER['REQUEST_URI'] ger sedan allt som står efter http://min.sida.se
Tack för hjälpen. Blir nog lättare om jag kör på din lösning så kan jag bara explode istället.
Edit:
Fast konstigt nog så fungerar det inte på Loopia. Däremot går det jättebra på min egna server.
Så här ser min .htaccess-fil ut nu:
php_flag display_errors on
php_flag display_startup_errors on
php_value error_reporting 2047
RewriteEngine on
RewriteRule . index.php
I been away since 1945
Corsair TX 650W | ASRock P67 Extreme 4 | Intel Core i5 2500K 3,3GHZ | Corsair 2x4GB DDR3 | Gigabyte GeForce GTX 560 Ti OC 1GB | Corsair SSD Force Series 60GB
Copyright © 1999–2023 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.