webForumDet fria alternativet

Skriva om url i htaccess

PHP

8 svar · 1 032 visningar · startad av keppan

Medlem sedan okt. 20138 inlägg
Frågan#1

Kan man skriva om url:en i htaccess.

exempel:

https://www.minsida.com/något_som_kan_variera/något_annat.html

till

https://www.minsida.com/något_annat.html

Tacksam för svar

Medlem sedan aug. 20068 090 inlägg
#2

Menar du att användaren ska hamna på en annan sida?
Visst. Gör ett sök på t.ex. htaccess redirect

Medlem sedan okt. 20138 inlägg
#3

Jag har sökt på det. Men exemplen visar bara t.ex index.php till något annat.
Jag vill att https://www.minsida.com/vadsomhelst/något-.html ska tabort "vadsomhelst"

och med "vadsomhelst" menar jag att vid ett tillfälle står det "abc" och ett annat tillfälle står det "def".

Medlem sedan aug. 20068 090 inlägg
#4

keppan skrev:

Jag har sökt på det. Men exemplen visar bara t.ex index.php till något annat.
Jag vill att https://www.minsida.com/vadsomhelst/något-.html ska tabort "vadsomhelst"

och med "vadsomhelst" menar jag att vid ett tillfälle står det "abc" och ett annat tillfälle står det "def".

Då har du nog letat lite dåligt.

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
https://kb.mediatemple.net/questions/85/Using+.htaccess+rewrite+rules#gs
http://coding.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/
http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/

Medlem sedan okt. 20138 inlägg
#5

Ok, det är löst nu.
Den som vill veta HUR jag (med hjälp av en grym medlem nitro2k01) löste det kan gå in på länkarna i ovanstående inlägg och läsa tills håret faller av. Eller om man inte riktigt förstår allt det där med ^/+*(*.) mm, men ändå behöver hjälp med detta får man gärna pm:a mig så hjälper jag till med det lilla jag kan.

:)

Medlem sedan aug. 20039 340 inlägg
#6

Jag hjälpte till i PM, men här kommer en sammanfattning av problemet och lösningen.

Det finns felaktiga länkar i Googles resultat som pekar mot http://www.minsida.com/fel/fel/något.html men ska leda till http://www.minsida.com/något.html

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+/)+([^/]+)$ /$2 [R=301,L]

De två första raderna är conditions som appliceras på nästföljande regel. De två första villkoren betyder att regeln inte appliceras om adressen leder till en katalog eller fil (d som i directory, f som i file.) Meningen med detta är att riktiga filer som ligger i en admin-katalog inte ska påverkas av denna regel och riktas om.

^ matcha början av uttrycket.
Delförklaring av ([^/]+/)+
[^/] matcha ett tecken som inte är en slash.

+ upprepning av det tidigare, en eller flera gånger.

/ matcha en slash.

[^/]+/ kan alltså matcha blabla/ eller liknande.

()+ betyder "gruppera det som finns innanför parenteserna". + betyder som tidigare en eller flera upperpningar. Grupperingen används här för att kunna upprepa ett helt underuttryck.

([^/]+/)+ i sin helhet kan matcha t ex blabla/ , blabla/blabla/ eller blabla/blabla/blabla/

Delförklaring av ([^/]+)
() Betyder även här gruppering, men meningen med denna gruppering är att kunna få ut den matchande strängen ur uttrycket. Eftersom detta är den andra gruppen motsvarar innehåller i parentesen $2 senare i regeln.
[^/] som tidigare, matcha ett tecken som inte är /
+ som tidigare, en eller fler upprepningar

$ markerar matching av slutet av strängen, dvs inget får komma efter.

Delförklaring av /$2
Detta är destinationsadressen.
/ en enkel framåtslash. Betyder att adressen ska utgå från webbroten istället för relativt vad webbläsaren tror är den nuvarande mappen.
$2 betyder matchning nr 2 från uttrycket.

Med andra ord, i alla dessa adresser kommer strängen 123 plockas ut, och bilda /123 som destinationsadress.
blabla/123
blabla/blabla/123
blabla/blabla/blabla/123

Delförklaring av [R=301,L]
R=301 betyder att denna regel inte är en intern omriktning (rewrite) utan en redirect som säger åt webbläsaren att gå till en annan sida. 301 står för statuskoden för en sida som har flyttat permanent.
L betyder att denna regel räknas som den sist (last) och att inga mer regler ska behandlas efter denna.

Medlem sedan okt. 20138 inlägg
#7

Hur tolkar google R=301 i detta fallet?
Förstår Google att den flyttade adressen är /123 och inte blabla/123.
Eller plockas länken bort från Goggle?

Medlem sedan aug. 20039 340 inlägg
#8

Google tolkar det som att sidan har bytt adress till den nya.

Medlem sedan okt. 20138 inlägg
#9

Lysande:)
Tack

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)