Mod_rewrite, rewrita en query string

Permalänk
Medlem

Mod_rewrite, rewrita en query string

Tjenare!

Varenda gång jag knåpar ihop någon hemsida så är det i särklass största problemet att rewrita URL:er, jag vet inte vad det är, kvittar hur många år jag haft samma problem, jag lär mig aldrig

Iaf, jag har en domän som ser ut såhär:

http://www.domän.se/profile.php?username=jespera

Vill strukturera om till:

http://www.domän.se/profile/jespera

Jag har testat alla möjliga kombinationer som någonsin har existerat sen universum skapades, inget fungerar.

Just nu ser min .htaccess ut såhär (tog det från ett svar på stackoverflow som enligt TS fungerade):

<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^/profile/([a-zA-Z0-9-@]+)\?*$ /profile.php?username=$1 [L,QSA] </IfModule>

Detta är givetvis helt fel och fungerar inte, så någon vänlig skäl som har lust att guida mig rätt?

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]

Detta kommer göra så att alla länkar fungerar som så kallade "clean urls". Det vill säga så kommer "/news.php?id=2&title=hej" bli /new/1/hej/ samma med profilen som du ville ha.

Visa signatur
Permalänk
Medlem

Tack för svaret men det fungerade tyvärr inte. Modulen är laddad och .htaccess filen läses men det fungerar ändå inte.

.htaccess filen ser ut såhär:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>

Min vhost fil ser ut såhär: (om nu jag råkat missa något där)
http://dev.jespera.se/serverconf.txt

Men tex när man använder $_GET för att hämta query strängen, behöver man inte lägga till "Request Method" i .htaccess, tex !GET?

Detta är lite märkligt, den koden du postade är ju exakt samma som tex WordPress använder och där fungerar pretty permalink på min host, iofs, WordPress kör ju alla request via sin index.php fil, det gör inte jag i just detta fallet, går ju direkt på profile.php.

Något annat jag kanske har missat i någon config fil?

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Tack för svaret men det fungerade tyvärr inte. Modulen är laddad och .htaccess filen läses men det fungerar ändå inte.

.htaccess filen ser ut såhär:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>

Min vhost fil ser ut såhär: (om nu jag råkat missa något där)
http://dev.jespera.se/serverconf.txt

Men tex när man använder $_GET för att hämta query strängen, behöver man inte lägga till "Request Method" i .htaccess, tex !GET?

Detta är lite märkligt, den koden du postade är ju exakt samma som tex WordPress använder och där fungerar pretty permalink på min host, iofs, WordPress kör ju alla request via sin index.php fil, det gör inte jag i just detta fallet, går ju direkt på profile.php.

Något annat jag kanske har missat i någon config fil?

Är detta regler för WP du vill ha? (Aldrig använt WP så har ingen koll på om deras urler är redan omskrivna, men de kanske de är). Men du får alltså 404 på en länk? Jag skrev ihop regler för apache och nu så måste du hantera länkarna i PHP också. Så visa gärna hur du gör det. Annars kan jag skriva ihop något som fungerar för hanteringen också, men visa gärna hur du gjort först.

Samt, htaccess filen är helt komplett nu, du behöver inte lägga till något annat i den.

Visa signatur
Permalänk
Medlem
Skrivet av Drager:

Är detta regler för WP du vill ha? (Aldrig använt WP så har ingen koll på om deras urler är redan omskrivna, men de kanske de är). Men du får alltså 404 på en länk? Jag skrev ihop regler för apache och nu så måste du hantera länkarna i PHP också. Så visa gärna hur du gör det. Annars kan jag skriva ihop något som fungerar för hanteringen också, men visa gärna hur du gjort först.

Samt, htaccess filen är helt komplett nu, du behöver inte lägga till något annat i den.

Nej, detta är inte för WordPress, WordPress fungerar redan som det skall, detta är för en helt annan sida gjord från scratch, behöver skicka med datan i query string så jag kan använda $_GET['username'] tex, men det fungerar ju inte nu för htaccessen skickar ju inte med datan för $_GET variabler.

Man måste väl göra något liknande detta i .htaccess: RewriteCond %{QUERY_STRING} ^(.*)$ men det fungerar inte heller så.

Gjorde ett snabbt exempel här ("logans" text kan ändras med $_GET, detta är bara ett exempel alltså):

http://dev.jespera.se/profile/hamburger <--- Detta vill jag att det skall fungera, $_GET variablen är alltså i detta fallet "hamburger"

"Riktiga" URL som fungerar är:

http://dev.jespera.se/profile/?username=hamburger <-- Detta skall alltså skrivas om till http://dev.jespera.se/profile/hamburger

Skulle gärna vilja så det går att skicka med oändligt mycket variabler (typ)

Tex så:

http://dev.jespera.se/profile/?username=hamburger&cake=tobler...

Kan skrivas om till:

http://dev.jespera.se/profile/hamburger/toblerone

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Nej, detta är inte för WordPress, WordPress fungerar redan som det skall, detta är för en helt annan sida gjord från scratch, behöver skicka med datan i query string så jag kan använda $_GET['username'] tex, men det fungerar ju inte nu för htaccessen skickar ju inte med datan för $_GET variabler.

Man måste väl göra något liknande detta i .htaccess: RewriteCond %{QUERY_STRING} ^(.*)$ men det fungerar inte heller så.

Gjorde ett snabbt exempel här ("logans" text kan ändras med $_GET, detta är bara ett exempel alltså):

http://dev.jespera.se/profile/hamburger <--- Detta vill jag att det skall fungera, $_GET variablen är alltså i detta fallet "hamburger"

"Riktiga" URL som fungerar är:

http://dev.jespera.se/profile/?username=hamburger <-- Detta skall alltså skrivas om till http://dev.jespera.se/profile/hamburger

Skulle gärna vilja så det går att skicka med oändligt mycket variabler (typ)

Tex så:

http://dev.jespera.se/profile/?username=hamburger&cake=tobler...

Kan skrivas om till:

http://dev.jespera.se/profile/hamburger/toblerone

Ja, men detta ska gå med denna htaccessen jag gav dig. Det är php som inte tolkar urlerna.

Visa signatur
Permalänk
Medlem
Skrivet av Drager:

Ja, men detta ska gå med denna htaccessen jag gav dig. Det är php som inte tolkar urlerna.

Ok så hur får man PHP till att göra det? Tex, om vi säger standard echo $_GET['username'] för URL:en www.domän.se/profile/?username=JesperA (www.domän.se/profile/JesperA

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Ok så hur får man PHP till att göra det? Tex, om vi säger standard echo $_GET['username'] för URL:en www.domän.se/profile/?username=JesperA (www.domän.se/profile/JesperA

När jag har skrivit PHP så har jag en php fil som innehåller alla mina sidor, jag har lagt in dem i i switch-case som hämtar QUERY_STRING & REQUEST_URI

Visa signatur
Permalänk
Medlem

Detta blir ju lite drygt, just nu behöver denna köras både på Apache och nginx, allt fungerar precis som det ska i nginx men tyvärr gäller inte samma regler för query strings i Apache + .htaccess som för nginx. Aja, får se vad jag hittar på istället då. Tack för svaren iaf

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Detta blir ju lite drygt, just nu behöver denna köras både på Apache och nginx, allt fungerar precis som det ska i nginx men tyvärr gäller inte samma regler för query strings i Apache + .htaccess som för nginx. Aja, får se vad jag hittar på istället då. Tack för svaren iaf

Okej, jo men grejen är att det inte är något fel på den .htaccess delen jag gav dig. Du måste hämta datan på ett vis

Visa signatur