Just nu i M3-nätverket
Gå till innehåll

Snygga urler


happyfejs

Rekommendera Poster


Försöker snygga till urlerna men får det inte riktigt att funka, eller inte alls rättare sagt.

 

Låg säga att jag har en länk <a href="?page=artikel&id=3245&title=någon-fin-titel">

 

och vill att det ska få urlen minurl.se/artikel/3245/nagon-fin-titel

 

Har testat att lägga massa olika saker i .htaccess men inget har funkat, just nu ser den ut så här

 

#Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1&id=$2&title=$3

 

EDIT: ska säga att jag har testat med sånt här i RewriteRule också ^/[A-Z0-9_-]+-([0-9]+)\.html$osv osv

 

i index.php är jag inte riktigt säker på avd jag ska skriva, förut har det sett ut så här för att ladda in den länken jag klickat på

 

<div class="content">
   <?php 
if(strstr($_GET

, ".") || strstr($_GET

, "/")) die ("Ett fel uppstod");
	if (!($_GET

)){
		$page = "pages/news.inc.php";
	} else {
		$page = "pages/$_GET

.inc.php";
	}
	require("$page");
?>
   </div>

 

Tack på förhand :)

Länk till kommentar
Dela på andra webbplatser

Du har det om bakfoten;

Du skall länka till den snygga urlen

<a href="/artiklar/3245/någon-fin-titel">Någon fin titel</a>

och sedan med mod rewrite göra om till index.php?page=artikel&id=3245&title=någon-fin-titel

 

Phpsidan som hämtar innehållet skall inte behöva ändras.

 

regeln ska se ut så här

RewriteRule ^artiklar/([0-9]+)/(.*)$ index.php?page=artikel&id=$1&title=$2

Länk till kommentar
Dela på andra webbplatser

Aha, I see, känns ju ganska logiskt iof :)

Får det dock inte riktigt att funka,

om jag länkar /varme/ från armands.happyfejs.se dvs armands.happyfejs.se/varme/ då kommer den till en sida utan css eller bilder, bara den texten som finns på den sidan jag ska till?

 

.htacces filen ser ut så här nu

 

RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)/$ index.php?page=$1

 

Thanx för svaret :)

 

EDIT:Tillägg, kom på att jag vill ju även att man bara ska kunna skriva typ armands.happyfejs.se/varme utan / framför varme.

Behövs det ingen [L] eller liknande framför rewriteRule föresten? Har testat lite olika men ser ingen skillnad..

 

EDIT: Nu har jag fått det att funka, skrev så här

 

RewriteRule ^(.*) index.php?page=$1 [NC,L]

 

Men nu funkar det bara om man skriver armands.happyfejs.se/varme , om man råkar skriva armands.happyfejs.se/varme/ så funkar det inte, hur löser man det?

 

Och en fråga till, många på en gång :) Om man har några sidor där jag bara vill hämta page och typ en sida där man vill hämta page och artikel, hur skriver man i .htaccess filen då? testade att bara lägga till en variabel i destionationen och en del i pattern för artikeln, men funkade inte så bra :S

Länk till kommentar
Dela på andra webbplatser

Enklast letar du upp en guide om url rewriting och prova dig fram istället för att ställa tusen frågor och sedan fråga om det som du absolute inte kommer vidare på.

har du testat: RewriteRule ^([\w\d_-]+)([/]?) index.php?page=$1 [NC,L]

 

Jag har redan svarat på din andra fråga. Den regeln sätter du isf före regeln ovan.

Länk till kommentar
Dela på andra webbplatser

Har följt några stycken, den här framförallt tyckte jag var ganska bra http://www.roscripts.com/Pretty_URLs_-_a_guide_to_URL_rewriting-168.html

Och jag har precis som han skriver gjort trial and error ett bra tag nu och lyckades ju få det att funka, hittar dock inget som beskriver med / tecken framför eller min andra fråga ifall man har en sida som skiljer sig i struktur från andra!

Kan man skriva flera RewriteRules i samma access fil menar du?

Länk till kommentar
Dela på andra webbplatser

Kan man skriva flera RewriteRules i samma access fil menar du?

Ja.

 

RewriteRule ^articles/([\d]+)([/]?)$ index.php?page=articles&id=$1 [NC,L]

RewriteRule ^news/([\d]+)([/]?)$ index.php?page=news&id=$1 [NC,L]

RewriteRule ^sitemap([/]?)$ index.php?page=sitemap [NC,L]

 

Jag tror att den viktar, så om det blir en matchning så körs det så försök hålla dig specifik

 

(.*) kommer ju matcha allt, så den regeln är inte bra alls.

Länk till kommentar
Dela på andra webbplatser

Najs, tänkte precis skriva att jag hade löst det efter många om och men

skrev så här

RewriteBase / 
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?page=$1

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

 

Samt att jag la till den här för att alla bilder skulle funka

RewriteRule ^.+(/images/.+)$ $1 [L]

 

Tack för hjälpen!

Länk till kommentar
Dela på andra webbplatser

Om jag har flera steg i urlen:en och en variabel saknas så blir det ju knas, kan man undvika det på nått sätt?

typ om jag har /kollektion/kuddar/runda/23 där kuddar = kategori och runda = underkategori om runda saknas och man gått direkt in på 23 från kuddar så blir det ju /kollektion/kuddar/23 och 23 ses då som en underkategori. Hur gör man bäst för att åtgärda det?

 

 

Tack på förhand :)

Länk till kommentar
Dela på andra webbplatser

?page=kollektion&t=Kuddar&st=Kvadratiska&id=23

 

eller så här om ingen underkategori är vald

?page=kollektion&t=Kuddar&st=&id=23

Länk till kommentar
Dela på andra webbplatser

Hur menar du man ska kunna göra det? Den jag mjöligtvis skulle kunna ta bort är ju kuddar om man är inne på kvadratiska etc, och då räkna ut att den tillhör kuddar..

Men vad händer om man har underkategori runda på två kategorier? Tex om du har runda tallrikar och runda kuddar?

 

Jag tar gärna emot förslag, jag kanske har snöat in på helt fel spår :S

Länk till kommentar
Dela på andra webbplatser

Känns lite overkill att underordna produkter på det sättet. Produkterna ska du läggas in i systemet och att katagorisera i underkategorier tar tid det också. Hur många produkter rör det sig om?

Förslags kan du ha en kategori som heter runda-kuddar istället som en underkategori,

Länk till kommentar
Dela på andra webbplatser

Hmm, fast om du kollar i vilken shop som helst så är det ju underkategorier, det rör sig om kanske 150 produkter, och har man tre olika former av kuddar och 5 olika former av lampor osv så kommer kategorilistan bli way to long om man inte kör underkategorier :S

Länk till kommentar
Dela på andra webbplatser

Najs, tänkte precis skriva att jag hade löst det efter många om och men

skrev så här

RewriteBase / 
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?page=$1

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

 

Samt att jag la till den här för att alla bilder skulle funka

RewriteRule ^.+(/images/.+)$ $1 [L]

 

Tack för hjälpen!

 

Du menar att bilderna inte fungerar annars?

 

Du får nog fundera lite på de omskrivningsreglerna noga. Känns som du inte tänker längre är att löst ett problem i taget. Försök se till helhetsbilden när du skapar omskrivningarna så du inte målar in dig i ett hörn eller måste jobba aktivt med omskrivningsregler - det är inget bra sätt att arbeta.

 

T ex.

1. du behöver inte använda rewrite base två gånger.

2. Du behöver inte flera likadana regler där det endast skiljer ett tecken - jag har redan visat hur det kan fungera med ett avslutande front-slash;

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

paranteserna gör det till en serie som man kan matcha mot. Frågetecknet gör att tecknet är frivilligt.

 

3. Behöver du siffror i vissa sektioner? Om inte ta bort det.

RewriteRule ^([a-zA-Z_-]+)/([a-zA-Z_-]+)(/)?$ index.php?page=$1&p=$2

 

4. Och vice versa - ska det bara vara siffror i viss sektion; ändra till det

RewriteRule ^([a-zA-Z_-]+)/([0-9]+)(/)?$ index.php?page=$1&p=$2

 

5. Jag är inte säker på hur du vill att allt ske se ut då du inte gett tillräcklig information, men så här kan regeln se ut med underkategorilistningen

( www.shop.se/kollektion/kuddar/kvadratiska/23/ )

RewriteRule ^([a-zA-Z_-]+)/([a-zA-Z_-]+)/([a-zA-Z_-]+)/([0-9]+)(/)?$ index.php?page=$1&t=$2&st=$3&id=$4

 

eller utan underkategori:

( www.shop.se/kollektion/kuddar/22/ )

RewriteRule ^([a-zA-Z_-]+)/([a-zA-Z_-]+)/([0-9]+)(/)?$ index.php?page=$1&t=$2&id=$3

 

 

det är inte speciellt svårt om du bara lär dig mönstret.

Länk till kommentar
Dela på andra webbplatser

Japp, bildernas sökväg blev inte rätt om man la in dem direkt via html sidan utan css, det funkade om man satte / föresökvägen men då hade jag fått ändra varenda bildlänk istället för att skriva i den, googlade det och verkade som det var ganska vanligt fel?

 

punkt 3 och 4 är jag medveten om, punkt 5 däremot är ju det problemet jag skrivit tidigare, jag använder mig av underkategorier men ibland innehåller inte variablarna något och då skiter det sig, dvs att jag skickar med st i url:en men den kan vara tom..

 

nu har jag rewriteRule

RewriteRule ^kollektion/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([0-9_-]+)(/)?$ index.php?page=kollektion&t=$1&st=$2&id=$3

 

där t är kategori, st underkategori

skriver jag bara kollektion/Kuddar/23 så tar den ju 23 som en underkategori vilket är id:et av produkten, det blir knas! Och skriver jag bara kollektion/Kuddar utan att skicka med st och id så funkar det inte heller :S

Länk till kommentar
Dela på andra webbplatser

Vanligt tror jag inte. Det är ju du själv som valt roten RewriteBase, den hade ju kunnat vara "Kollektion" istället. Det är det jag säger, du har inte funderat helt färdigt.

 

Gällande din fråga så skrev jag båda reglerna. Läs mitt inlägg igen.

Länk till kommentar
Dela på andra webbplatser

Okay, så egentligen kan man skita i rewritebase bara?

 

Nu har jag skrivit så här och uppnått det jag vill

RewriteBase / 
RewriteRule ^kollektion/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([0-9_-]+)(/)?$ index.php?page=kollektion&t=$1&st=$2&id=$3

RewriteRule ^kollektion/([a-zA-Z0-9_-]+)/([0-9_-]+)(/)?$ index.php?page=kollektion&t=$1&id=$2

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

RewriteRule ^kollektion/([a-zA-Z0-9_-]+)(/)?$ index.php?page=kollektion&t=$1

 

Men ifall jag bara ska till kollektion/Kuddar måste jag lägga in en egen rewriteRule utan st och id då som jag gjort nu? Eller kan man inte gör på nått sätt att de ska vara frivilliga också? Har testat att sätta parantes och ? runt de men funkar inte så bra :S

Länk till kommentar
Dela på andra webbplatser

Testade så och även att sätta parenteserna utanför / men funkade inte ändå tyvärr :S..

Men jag testar mig fram, nu förstår jag hur det funkar hyffsat iaf, som sagt, är väl ganska mycket trial and error här :)

Tack för hjälpen :D

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Testade så och även att sätta parenteserna utanför / men funkade inte ändå tyvärr :S..

Men jag testar mig fram, nu förstår jag hur det funkar hyffsat iaf, som sagt, är väl ganska mycket trial and error här :)

Tack för hjälpen :D

 

hejsan

jag har ett tips iallafall.

.htaccess


RewriteEngine On
RewriteBase / 



RewriteRule ^([^\.]+)$ index.php/$1

 

php funktionen


<html><body>
<a href="/ja/och/nej/?sida=äöå?&ca=7&cas=5">tyck på me</a><br>


<?
function getdata()
{

// byter och rent get
$tmp['get']=$_GET['get'];
unset($_GET['get']);

// delar  ner text med /
$pieces = explode("/", $tmp['get']);

foreach ($pieces as $value) {

	$pos = strpos($value, '&');

	if ($pos !== false) {

		// delar  ner text med |
		$extract = explode("&", $value);

		foreach ($extract as $find) {

			$posx = strpos($find, '=');

			if ($posx !== false) {

			// delar  ner text med =
			$ext = explode("=", $find);

				for ($i = 0; $i <=  count($ext); $i++) {
				    $_GET[$ext[0]]=$ext[1];
				}

			} else {

			} 
		}

	} else {



	$_GET[$value]=$value;

	} 

}

foreach ($_GET as $find => $value) {

	if($find=="")
	{
	unset($_GET[$find]);
	}
}


return $_GET;

}

$_GET['get'] = $_SERVER["REQUEST_URI"];

$getdata = getdata();

print_r($getdata);

?>
</body></html>

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Behövs det inte mer än en variabel i rewriteRulen om man har fler steg i urlen? isf lärde jag mig nått nytt och gööörbra :P

 

Eller vaddå jag fattar inte vad /ja/och/nej har för funktion i länken?

Länk till kommentar
Dela på andra webbplatser

Behövs det inte mer än en variabel i rewriteRulen om man har fler steg i urlen? isf lärde jag mig nått nytt och gööörbra :P

 

Eller vaddå jag fattar inte vad /ja/och/nej har för funktion i länken?

 

 

Hej

 

Du kan kombinera båda /start/ja och med vanliga ?sida=äöå?&ca=7

 

den plockar ut värdarna och gör en Array.

den sätt ihop värdarna med nycklarna

 

Array

(

[ja] => ja

[och] => och

[nej] => nej

[?sida] => äöå?

[ca] => 7

[cas] => 5

)

 

 

//mac3

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...