ugrás a tartalomhoz

Rövid URL-t nem a htaccess oldja fel, hanem automatikusan kiterjesztést kap

tisch.david · 2009. Jún. 16. (K), 09.46
Sziasztok!

$SUBJECT témában kérnék segítséget. Apache-ban a rewrite modul engedélyezve van, a document root-ban pedig ott van az alábbi .htaccess:

RewriteEngine On

RewriteRule ^(\w+)/([0-9]+)$ /site/$1.php?id=$2
A htaccess értelmezése megtörténik, mert ha elrontom, akkor sír érte az Apache. A feloldást mégsem ő végzi, mert ha a szabály jobb oldalán hülyeséget írok, akkor sem történik semmi; mindig automatikusan a document root-ban lévő, azonos nevű de .php kiterjesztésű állomány fut le, de GET-ben semmi paraméter nem jön.

A document root-hoz tartozó virtual host beállítás az alábbi:

Options Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
Minden segítséget, linket és keresőszót köszönök!

Üdv:
Dávid
 
1

^

duplabe · 2009. Jún. 16. (K), 12.01
^(\w+)/([0-9]+)$

ez a szabály arra illeszkedik pl, hogy kutya/23

de az url-ben lényegesen több dolog van: http://atedomained/ittislehetmegsokminden/kutya/23
mivel a szabály elején ott van a ^ emiatt nem is illeszkedik. azt le kéne szedni az elejéről.

szerk:
hülyeséget írtam, bár nem teljesen :) nem az egész url-t kapja meg, viszont van egy / az elején, tehát ebben az esetben (http://atedomained/ittislehetmegsokminden/kutya/23) ezt: /ittislehetmegsokminden/kutya/23

Akkor a szabály így lenne jó: ^/(\w+)/([0-9]+)$
2

Nem hiányzik a végéről egy

Tanul0 · 2009. Jún. 16. (K), 12.26
Nem hiányzik a végéről egy [L,QSA]??? vagy azt csak nem írtad ki?
3

rerite log

vbence · 2009. Jún. 16. (K), 13.00
A rewrite szabályok debugolásánál mindig segítségül hívhatod a megfelelő logot (persze ha be van kapcsolva ez a funkció). Megfelelően bőbeszédű beállításoknál egyetlen kérés alapján kiderülhet a hiba oka.
4

RewriteLogLevel 2 RewriteLog

Tanul0 · 2009. Jún. 16. (K), 13.06
RewriteLogLevel 2
RewriteLog /path/to/log/rewrite.log

Szerintem ennyi elég, ebben minden benne lesz.
5

Furcsán illeszkedő szabály

tisch.david · 2009. Jún. 16. (K), 14.02
Sziasztok!

Köszi a tippeket! Apache 2-ről lévén szó, a / nem kell a szabályok elejére, az [L] azonban tényleg hiányzott a végéről, ezért odaírtam. A .htaccess most így néz ki:
RewriteEngine On

RewriteRule ^(\w+)$ /site/$1.php [L]
RewriteRule ^(\w+)/([0-9]+)$ /site/$1.php?id=$2 [L]
RewriteRule ^(\w+)/([0-9]+)/([0-9]+)$ /site/$1.php?id=$1&page=$2 [L]
Meg is logoltattam, ami alapján úgy tűnik, hogy a http://domain/category/200/1 linket a /site/200.php?id=1 címre akarja átírni. Nem igazán vágom, hogy erre miért nem a 3. szabály illeszkedik... Mit nem veszek észre?

Köszi előre és utólag is:

Dávid
6

itt egy kis példa, hogy

Tanul0 · 2009. Jún. 16. (K), 14.30
itt egy kis példa, hogy hogyan lehet megoldani a sok paramétert tartalmazó linkek rövid változatát:
	RewriteRule ^0(;(.*))?$ forum.php?rewrite=$2 [L,QSA]

	RewriteRule ^([0-9]+)(;(.*))?$ forum.php?req=thread&id=$1&rewrite=$3 [L,QSA]

	RewriteRule ^([0-9]+),(-?[0-9]+)(;(.*))?$ forum.php?req=thread&id=$1&page=$2&rewrite=$4 [L,QSA]

	RewriteRule ^f\.([0-9]+)(;(.*))?$ forum.php?req=main&id=$1&rewrite=$3 [L,QSA]

	RewriteRule ^t\.([0-9]+)(;(.*))?$ forum.php?req=thread&id=$1&rewrite=$3 [L,QSA]

	RewriteRule ^p\.([0-9]+)(;(.*))?$ forum.php?req=thread&postid=$1&rewrite=$3 [L,QSA]

	RewriteRule ^u\.([0-9]+)(;(.*))?$ forum.php?req=cp&id=$1&rewrite=$3 [L,QSA]

	RewriteRule ^s\.(.*) forum.php?req=search&InSubject=1&InMessage=1&Query=$1 [L,QSA]

	# End OLD declarations

	RewriteRule ^forum/([0-9]+)[^;]*(;(.*))?$ forum.php?req=main&id=$1&rewrite=$3 [L,QSA]

	RewriteRule ^thread/([0-9]+),(-?[0-9]+)[^;]*(;(.*))?$ forum.php?req=thread&id=$1&page=$2&rewrite=$4 [L,QSA]

	RewriteRule ^thread/([0-9]+)[^;]*(;(.*))?$ forum.php?req=thread&id=$1&rewrite=$3 [L,QSA]

	RewriteRule ^post/([0-9]+)[^;]*(;(.*))?$ forum.php?req=thread&postid=$1&rewrite=$3 [L,QSA]

	RewriteRule ^user/([0-9]+)[^;]*(;(.*))?$ forum.php?req=cp&id=$1&rewrite=$3 [L,QSA]

	RewriteRule ^search/(.*) forum.php?req=search&InSubject=1&InMessage=1&Query=$1 [L,QSA]

	RewriteRule ^unread(;(.*))?$ forum.php?req=search&nodef=1&Special=unread&ResultView=1&rewrite=$2 [L,QSA]

	RewriteRule ^new(;(.*))?$ forum.php?req=search&nodef=1&Special=new&ResultView=1rewrite=&$2 [L,QSA]

	RewriteRule ^mytopics(;(.*))?$ forum.php?req=search&nodef=1&Special=mytopics&ResultView=1rewrite=&$2 [L,QSA]

	RewriteRule ^cp(;(.*))?$ forum.php?req=cp&item=1&rewrite=$2 [L,QSA]

	RewriteRule ^users(;(.*))?$ forum.php?req=users&rewrite=$2 [L,QSA]

	RewriteRule ^search(;(.*))?$ forum.php?req=search&rewrite=$2 [L,QSA]
	RewriteRule ^stat(;(.*))?$ forum.php?req=stat&rewrite=$2 [L,QSA]

	RewriteRule ^forum(;(.*))?$ forum.php?req=main&rewrite=$2 [L,QSA]

Vagy, ajánlom figyelmedbe a switch használatát:

$oldal = explode('/',$_GET['oldal']);  
   
 switch($oldal[0])  
  {  
   case 'forum':  
    if (isset($oldal[1])){ //megvizsgáljuk, hogy van-e megadva konkrét forum az URL-ben  
     //megjelenítjük a konkrét hírt ($oldal[1]-ben lesz a forum ID-je, vagy neve)  
	 $forum=$oldal[1];}
    else echo "nincs"; 
 //megjelenítjük mondjuk az utolsó x darab hírt  
	if(isset($oldal[2]))
	{
	$temaid=$oldal[2];
	}else echo "nincs";
	

  break; 
  };
	if(!isset($oldal[0])) $oldal[0]="hirek";
      $invalide = array('/','/\/',':','.');
      $oldal[0] = str_replace($invalide,' ',$oldal[0]);
      if(!file_exists($oldal[0].".php")) $oldal[0] = "hirek";
      include($oldal[0].".php");
7

Vissza az elejére

tisch.david · 2009. Jún. 16. (K), 15.27
Sziasztok!

Tovább teszteltem a .htaccess-t, és úgy tűnik, hogy a http://domain/bla/200/1 -et valóban a .htaccess dolgozza föl, méghozzá jól (szól az Apache, hogy nincsen bla.php), de ha bla helyett olyan megnevezés áll (pl. category vagy main), amilyen - .php kiterjesztéssel - létezik a document root-ban, akkor egyszerűen az kapja meg a vezérlést, és kész. Be lehet valahol állítani a httpd.conf-ban, hogy rewrite rule nélkül a http://domain/main esetén a main.php ne kapja meg automatikusan a vezérlést?

Köszi! Üdv:

Dávid
9

MultiViews

vbence · 2009. Jún. 16. (K), 16.08
Te kapcsoltab be...
10

Hogyaza...

tisch.david · 2009. Jún. 16. (K), 22.44
Hálás köszönet! Ő volt a ludas.

Üdv:
Dávid