webForumDet fria alternativet

Rewrite rule +form action

19 svar · 1 244 visningar · startad av Thompa__85

Thompa__85Medlem sedan aug. 2002600 inlägg
#1

Hej Wf,

Jag har lite problem här med min rewrite rule.
Så här ser min kod ut:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?team=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?team=$1
RewriteRule ^info/([a-z_-]+)/?$ /index.php?info=$1
RewriteRule ^script/([a-z_-]+)/?$ /script/index.php?do=$1

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ /index.php?team=$1&page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?team=$1&page=$2

Detta fungerar utmärkt med alla undersidor osv. Problemet är när jag vill köra formulär och ska välja action.
Om jag kör med:

action="/script/index.php"

Så fungerar det inte.
Inte heller om jag kör med:

action="/script/skapalag"

Hur ska jag göra för att mina formulär ska fungera tillsammans med min rewriterule?

Tack på förhand!

metalboyMedlem sedan jan. 2005953 inlägg
#2

Lägg till RewriteCond för varje RewriteRule att det inte ska gälla om det finns en fil eller katalog med det namnet. Så här:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ... ...

Lägg också till flaggan QSA (Query String Append) på dina regler, så här

RewriteRule ... ... [QSA]
Thompa__85Medlem sedan aug. 2002600 inlägg
#3

Hej,
Tack för svar.
Såhär ser min kod ut nu:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?team=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?team=$1
RewriteRule ^info/([a-z_-]+)/?$ /index.php?info=$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^script/([a-z_-]+)/?$ /script/?do=$1 [QSA]

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ /index.php?team=$1&page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?team=$1&page=$2

Dock får jag fortfarande de inte att fungera. Missade jag nått? :)

Tack på förhand

metalboyMedlem sedan jan. 2005953 inlägg
#4

Och vad betyder att du inte får det att fungera? Får du något felmeddelande? Vad händer?
Använder du GET eller POST som method för formulärdatat?

Thompa__85Medlem sedan aug. 2002600 inlägg
#5

Hej igen.

Form:

<form name="skapa" action="/script/skapalag" method="POST" />

Det som händer är att jag hamnar på /script/skapalag
Dock att den tror att det är ett lag, dvs att den följer denna rewrite rule: RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?team=$1 och inte RewriteRule ^script/([a-z_-]+)/?$ /script/?do=$1 [QSA]

Vad gör jag för fel? :)

metalboyMedlem sedan jan. 2005953 inlägg
#6

Lägg till flaggan L (Last) för script-regeln.

RewriteRule ^script/([a-z_-]+)/?$ /script/?do=$1 [QSA, L]
Thompa__85Medlem sedan aug. 2002600 inlägg
#7

Hej igen,

Testade att lägga till det och tyvärr gjorde det ingen skillnad..

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?team=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?team=$1
RewriteRule ^info/([a-z_-]+)/?$ /index.php?info=$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^script/([a-z_-]+)/?$ /script/?do=$1 [QSA,L]

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ /index.php?team=$1&page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?team=$1&page=$2

Och det är alltså när kan kör ett formulär för /script/text

:/

metalboyMedlem sedan jan. 2005953 inlägg
#8

Okej, nu har jag testat och följande .htaccess-fil verkar fungera så som du vill:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^info/([a-z_-]+)/?$ /index.php?info=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^script/([a-z_-]+)/?$ /script/?do=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?team=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?team=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ /index.php?team=$1&page=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?team=$1&page=$2 [L]

Notera att det är viktigt i vilken ordning reglerna kommer

Tillägg:
QSA-flaggan behövs inte eftersom du använder method="POST" på ditt formulär, men jag tog med den ändå :)

Thompa__85Medlem sedan aug. 2002600 inlägg
#9

metalboy skrev:

Okej, nu har jag testat och följande .htaccess-fil verkar fungera så som du vill:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^info/([a-z_-]+)/?$ /index.php?info=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^script/([a-z_-]+)/?$ /script/?do=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?team=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?team=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ /index.php?team=$1&page=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ /index.php?team=$1&page=$2 [L]

Notera att det är viktigt i vilken ordning reglerna kommer

Tillägg:
QSA-flaggan behövs inte eftersom du använder method="POST" på ditt formulär, men jag tog med den ändå :)

Hej,

tack för ditt svar!
Det mesta verkar fungera nu. Jag kan tex nå /script/do osv nu.
Dock så fungerar det inge bra tillsammans med min php. Så fort jag tex har funktionen

$do = mysql_real_escape_string($_GET['do']);

Så fungerar det inte. Skriver jag däremot tex:

echo $_GET['do'];

Så fungerar det.

Vad beror det på? Detta gör att mina script inge fungerar nå bra.
Vet du vad det kan bero på?

Tack på förhand

metalboyMedlem sedan jan. 2005953 inlägg
#10

Och då var vi där igen då... :)

metalboy skrev:

Och vad betyder att du inte får det att fungera? Får du något felmeddelande? Vad händer?

Thompa__85Medlem sedan aug. 2002600 inlägg
#11

metalboy skrev:

Och då var vi där igen då... :)

Ah förlåt :)
Det blir bara en vit sida.
Skriver jag enbart

<?php
echo "hej"; 
?>

Så fungerar det. Men om jag kör tex

$do = mysql_real_escape_string($_GET['do']);

Så blir det bara vitt. 500 felmeddelande.

Jag vet att scriptsidan fungerar för det har jag testat från annat håll.
Vet du vad det kan vara?

prplxrMedlem sedan juni 2012582 inlägg
#12

Felet är att du inte har någon koppling mot MySQL. Detta krävs för att du ska kunna använda funktionen mysql_real_escape_string().

PS! Överväg att gå över till de nyare varianterna såsom mysqli eller PDO då mysql_x framöver kommer upphöra.

Thompa__85Medlem sedan aug. 2002600 inlägg
#13

prplxr skrev:

Felet är att du inte har någon koppling mot MySQL. Detta krävs för att du ska kunna använda funktionen mysql_real_escape_string().

PS! Överväg att gå över till de nyare varianterna såsom mysqli eller PDO då mysql_x framöver kommer upphöra.

Hm okej. Men jag har en vanlig databaskoppling högst upp på sidan?
Den fungerar ju om jag kör den separat utan rewriterule.
Måste jag göra nått speciellt med den?

mysql_connect("localhost", "user", "password");
mysql_select_db("databas") or die("Databaskopplingen kunde inte upprättas.");
mysql_query("SET NAMES UTF8");
prplxrMedlem sedan juni 2012582 inlägg
#14

Är du säker på att den koden körs? Pröva att, där du nu har mysql_real_escape_string("somethingsomething"), köra mysql_query("SELECT * FROM entabell LIMIT 1") och se ifall det blir något knas.

Thompa__85Medlem sedan aug. 2002600 inlägg
#15

prplxr skrev:

Är du säker på att den koden körs? Pröva att, där du nu har mysql_real_escape_string("somethingsomething"), köra mysql_query("SELECT * FROM entabell LIMIT 1") och se ifall det blir något knas.

Hej,

Det fungerade. Tog bort mysql_real_escape_string och körde en Select istället och den hämtar data från databasen.. Väldigt märkligt? Eller?

prplxrMedlem sedan juni 2012582 inlägg
#16

Ja, det är väldigt märkligt. Det kan jag inte alls förstå. Vad är det du escapear då? Kan du flytta det?

Thompa__85Medlem sedan aug. 2002600 inlägg
#17

prplxr skrev:

Ja, det är väldigt märkligt. Det kan jag inte alls förstå. Vad är det du escapear då? Kan du flytta det?

Tar jag bort mysql_real_escape_string så fungerar scriptet utan fel... hmm.
Varit med om något liknande tidigare?
Finns det andra sätt så jag kan säkra mig från attacker om jag inte kan använda mig av mysql_real_escape_string?

prplxrMedlem sedan juni 2012582 inlägg
#18

Ja på båda frågorna. Ibland har jag haft sådana här, till synes oförklarliga, problem med mysql_real_escape_string().

Ett annat sätt att skydda sig från SQL injections är som jag nämnde i mitt första svar att gå över från mysql_x till PDO. Om du kör prepared statements i PDO så existerar inte SQL injections. Det är helt enkelt omöjligt och du behöver inte bry dig om det alls.

Thompa__85Medlem sedan aug. 2002600 inlägg
#19

prplxr skrev:

Ja på båda frågorna. Ibland har jag haft sådana här, till synes oförklarliga, problem med mysql_real_escape_string().

Ett annat sätt att skydda sig från SQL injections är som jag nämnde i mitt första svar att gå över från mysql_x till PDO. Om du kör prepared statements i PDO så existerar inte SQL injections. Det är helt enkelt omöjligt och du behöver inte bry dig om det alls.

Okej, är det ett stort steg att gå från mysql_x till PDO?

Någon annan som vet varför det inte fungerar med mysql_real_espace_string() för mig? :)

Tack på förhand!

prplxrMedlem sedan juni 2012582 inlägg
#20

Thompa__85 skrev:

  1. Okej, är det ett stort steg att gå från mysql_x till PDO?

  2. Någon annan som vet varför det inte fungerar med mysql_real_espace_string() för mig? :)

Tack på förhand!

  1. Det beror på. Är du van vid objektorienterad PHP så är det absolut inte stort, annars kanske det kan kännas lite ovant, men man vänjer sig ganska fort.

  2. Om du postar hela din kod så kan vi ju titta på den, men de få rader vi fått hittills är tyvärr inte till så mycket hjälp.

PS! Jag skickade ett PM till dig utifall du missat det.

137 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)