apache rewrite kérdés

sziasztok!

van egy .htaccess fájlom az alábbi tartalommal:

IfModule mod_rewrite.c
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?m=$1 [QSA]
/IfModule

a cucc tökéletesen működik az alábbi formában pl:

http://valami.hu/forum

de szerenék +1 (vagy több) /valamit használni, pl:

http://valami.hu/forum/1

vagy

http://valami.hu/forum/allas/it/1245

hogy lehet ez utóbbit megoldani, mit kell még a htaccessbe beírni, mert bármit próbáltam, hibát írt ki?
van valakinek tapasztalapa?

előre is köszi!

Hozzászólások

mit kell még a htaccessbe beírni

egy fájllal akarod több könytár jogait beállítani?

----------------------------------------------------------------
"A megoldas mindeki kerdesere egyszeru.
OLVASSATOK DOKUMENTACIOT!"
by thuglife

megvan!

szokás szerint én voltam az állat...
az eredeti cucc tökéletesen működik. megpróbálom leírni.

van a statndard valami.hu/oldal

szóval, mikor lekérdem, h mi is lehet a változó, amit keresünk, akkor ez lesz:

oldal

mikor meg az url ez: valami.hu/oldal/25

akkor a változó a php-ban:

oldal/25

tehát csak fel kell bontanom / -ek szerint.

a hozzászólások jó gondolatébresztők voltak. már 3 napja ezzel szívtam, kicsit kétségbe voltam esve, h nemmegy, de végül is igen!!!

köszi fiúk a segítséget!

Sziasztok!

Nem pont ehez a problémához tartozik a kérdésem, de nem akartam új témát nyitni.
A felállás a következő: van egy apache 2.2.3 szerver, ami php oldalakat szolgál ki. Az oldalon bőségesen vannak képek és média fájlok. Gondoltam arra, hogy felrakok egy lighttpd forrásból, és a documnet root -ját beállítom ugyan arra a könyvtárra, amire az apache is van. A portot megváltoztattam 80-ról 81 -re. Ez eddig jó is, a lighttpd szépen megy is. Viszont a statikus fájlokat a lighttpd-nek kellene kiszolgálnia. Pl. ha a www.eredetidomain.hu/images/kep001.jpg kérés jön, akkor az url_rewrittal rá kellene venni, hogy a www.eretdetidomain:81/images/kep00.jpg legyen.
Olvasgattam az url_rewrite oldalát, de nem igen találtam rá a megoldásra. Tudna valaki segíteni ebben?
Előre is köszönöm!
___________________________________________________________________
Lógnak a pálmafán a kókuszok .... :)

Köszi! Ez így már fél siker. Na egy kicsit több. Most megadtam neki, hogy /valami/images és onnan szépen nyomja a lighty a képeket. Viszont hogy tudnám az az apache -nak, hogy ne csak az adott könyvtárat irányítsa át a lightynak, hanem a *.jpg *.gif *.png fájlokat, mert képek nem csak a fent megadott könyvtárban vannak.
Lehet ilyet?
___________________________________________________________________
Lógnak a pálmafán a kókuszok .... :)

Az adott host beállításához az apacheban hozzáadtam a következő sorokat:
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /kepek http://0.0.0.0:81
ProxyPassReverse /kepek http://0.0.0.0:81

A lightynak a /kepek a document rootja. Így az apache2 az összes /kepek kiszolgálását a lightyra passzolja át. Én azt szeretném, hogy az egész tartalomból az összes jpg, jpeg, gif, png, css, js tartalmakat a lighty szolgálja ki, így az apache2 -re maradna csak a php -vel való foglalkozás. Gondolom valami url rewrittal kellene módosítani a fent említett apache beállítást. Segíteni valaki ebben?

___________________________________________________________________
Lógnak a pálmafán a kókuszok .... :)

Sziasztok!

Én sem nyitnék külön topicot, legalább egy helyen lesz az érdeklődöknek:)

Sajnos a oly sokszor feljött téma nekem sem megy:-/

Cél: egy külső valami.php-ról ne lehessen elérni a szervert, vagy vmi hibaoldalra dobja át.

Megvalósitási próbálkozás:
1.
RefererIgnore http://kulsodomain.hu/iframe.php
/mod_log_referer.so modul betötve/
Sajnos hiába teszem be ezt a direktivát, mintha ott sem lenne.

2.
RewriteEngine on
RewriteMap emap txt:/etc/apache-ssl/refer.txt
RewriteCond %{HTTP_REFERER} !^-$
RewriteCond ${emap:%{HTTP_REFERER}} ^-$
RewriteCond %{REQUEST_FILENAME} (htm|html|php)$
RewriteRule ^(.*)$ http://sajatdomain.hu/hiba.html [R,L]

cat refer.txt:
http://kulsodomain.hu/iframe.php -

Sajnos itt sem érek el semmit.

Hol hibázok? Mily módon lehetne megvalósitani a fenti célt?
Előre is köszönöm!

sajnos igy sem megy, simán behozza bármelyik linket egy alapesetben tiltott phpfájlról linkelve.

igy próbálom tesztelni:
valami.php
<?php
echo $_SERVER['HTTP_REFERER'];
echo "link";
?>

/valami.php szerepel a refer.txt-ben/

a "echo $_SERVER['HTTP_REFERER'];" csak a mappáig irja ki, a valami.php fájlt már nem, nem tudom ez gondot okoz?
A refer.txt-be mappát is próbáltam tenni, amit az echo ir ki, de negativ. Egyébként is egy adott külső php-t kelle csak tiltanom.

Hm...mégsem teljes a siker. vmi komolyabb fegyver kell.

Azért szerettem volna tiltani egy külső php fájlt, mert az a következő képpen akarta a toplista állását javitani:
img src="http://sajatdomain.hu/toplista/in2.php?s=volume&t=1179144772" width="1" height="1" alt=""
img src="http://sajatdomain.hu/toplista/in2.php?s=island&t=1179144772" width="1" height="1" alt=""

Ez percenként lefut náluk...
Feladatom, hogy kizárólag ezt a kérést generáló fájlt droppoljam, a domaint ne.
Az "img" miatt úgy látom nincs referer. Van ötletetek?

Előre is köszönöm!

sziasztok!
elakadtam rewrite-ban énis..
olyanra lenne szükségem, hogy sok vhostban, ha beírják, hogy
http://doménnév/webmail, vagy https://doménnév/webmail, akkor
rewriteolja az apache, a doménnevet megtartva és küldje a usert
a https://doménnév/webmail-re, ami persze csak egy helyen van
/web/webmail könyvtárban
tudtok ebben segíteni? 2óra doksi guberálásból nem sikerült megcsinálnom,
lehetetlennek tartom lassan :)

Hali, itt a salyat fejlesztesu sef osztalyom.
Sajnos par funkciokat ki kellett torolnom belole mivel par specialis URL kezeles volt beleepitve amit egy sitenal kellett hasznalnom. Nem teszteltem le, de elmeletileg ez igy kell mukodjon.
Erdekessege az, hogy bizonyos URL-knek tetszoleges szoveget is megadhatsz, ehez bovitsd a "getAlias" fuggvenyt.
(pl: http://valami.hu/content/view/12 helyett http://valami.hu/search-engine-friendly.html )

file: .htaccess


DirectoryIndex index.html index.php

RewriteEngine On
#turn on the Rewrite engine, if it's not already active

#set the base directory to /
RewriteBase /

# now the rewriting rules
RewriteRule / index.php [L] 

file: sef.php


<?php
//
// SEF class 
// sef.php
//

/*
	Szukseged lesz egy globalis $config tombre, ami a kovetkezoket kell tartalmazza
	$config = Array(
		'sitepath' 	=> 'http://www.valami.hu/',
		'sef' 		=> true  // ha az ertek "false" akor nem fogja vegrehajtani az URL atalakitast
				   );
*/


class sef {
	var $lang;
	var $ack=0;

    function sef(){
		global $config;
		
		$this->ack= $config['sef'];

		if ($this->ack) {
			$this->restoreGet();
		}
	}

	function restoreGet(){
		$this->sefRedirect($_SERVER['REQUEST_URI']);
		
		$parts = split("/", $_SERVER['REQUEST_URI']);
		
		$ext = $this->getInternal($_SERVER['REQUEST_URI']);

		if ($ext) {
			$_GET = $this->parseURL($ext);
		} else {		
			for ($i=0; $i<count($parts); $i += 2)
				$_GET[$parts[$i]] = $parts[$i+1];
		}		
	}
	
	function sefRedirect($url) {
		global $config;
		$url = explode('index.php?',$url);
		if (count($url)>1) {
			header('Location: ' . $config['sitepath'] . $this->generateSEF('index.php?'.$url[1]) . "\n");
			die();
		}
	}

	function getsef($internal){
		global $config;
		
		if (!$this->ack) return $internal;
		
		$external = $this->generateSEF($internal);

		return $config['sitepath'] . $external;
	}
	
	function parseURL($internal) {
		$URLparams =  parse_url($internal);
		$URLparams =  $URLparams['query'];
		$URLquery = explode('&',$URLparams);
		
		for($i=0;$i<count($URLquery ); $i++) {
			$atmp = explode('=',$URLquery[$i]);
			$A_GET[$atmp[0]] = $atmp[1];
		}

		return $A_GET;

	}
	
	function generateSEF($internal) {

		$aget = $this->parseURL($internal);
		
		$pkeys = array_keys($aget);
		
		$alias = $this->getAlias($internal);
		
		if ($alias) {
		    $sefURL = $alias;
		} else {
			for ($i=0; $i<count($pkeys); $i++) {
				if ( ($pkeys[$i]!='task')&&($pkeys[$i]!='lang') )
					$sefURL .= $pkeys[$i] . '/' . $aget[$pkeys[$i]] . '/';
			}
		}

		return $sefURL;
	}
	
	function getAlias($internal) {

		$retval = '';
		// Egyedi URL hozzarendeles.
		//Pl: http://www.valami.hu/search-engine-friendly.html
		
		return $retval;
	}

}
?>

A hasznalata egyszeru:
1. Az index.php alomanyba (lehetoleg minel elobre):


<?php
  require_once('sef.php');
  global $sef;
  $sef = new sef();
?>

2. Minden hivatkozas letrehozasanal ezt kell alkalmaznod:


  <a href="<?php $sef->getsef('index.php?....');?>" >link szovege</a>

(erre egy masik modszer, ami lenyegesen praktikusabb, hogy buffer-olt kimenetet hasznalsz, letapogatod az url-ket es mindenikre alkalmazod a getsef fuggvenyt. Figyelem: ezt csak abban az esetben hasznald, ha az oldalon semmien mas komponensed nem hasznalja a kimeneti buffert)

miért van, hogy adott rewritecond működik .htaccess-ben, de a server configban nem? server configban alábbi példa minden kérést átirányít feltétel nélkül és nem jelenik meg semmi a rewritelog-ba. .htaccess-ből minden rendben.

Server version: Apache/2.2.3

...
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . http://localhost/ [NS,L]

Nálam is felmerült egy hasonló probléma amire nem tudok rájönni:


RewriteEngine On
RewriteRule ^/mappa/(.*) http://domain.hu/download.php?eleres=$1 [R=permanent]

Ezt eddig remekül működik, azonban szeretném ha csak fájlok esetén irányitana át.
Igy próbálkoztam:


RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^/mappa/(.*) http://domain.hu/download.php?eleres=$1 [R=permanent]

Ez esetben viszont sosem irányit át. Hogyan lehetne mégis megvalósitani a szitut?

--
Desktop: 2.6.21-gentoo-r4 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
Laptop: 2.6.22-gentoo-r5 Mobile Intel(R) Pentium(R) 4 - M CPU 2.00GHz

autoindex be van kapcsolva, úgy ballagtam el a fájlig, tehát létezik, mégsem irányitotta át.

Cél: domain alatt lévő 1 mappából minden fájlt csak a download.php-n keresztül lehessen letölteni, ezért oda szeretném átirányitani. Mappán kivül pedig hagyja ahogy van.

Jelenleg kiterjesztésre működik már a dolog, de jobb szeretném minden fájlra kiterjeszteni, olyanra is, ahol gagyi.fajlnev.sokpontos.kiterjesztes van.


RewriteCond %{REQUEST_FILENAME} (\.rar|\.exe|\.zip)
RewriteRule ^/mappa/(.*) http://domain.hu/download.php?eleres=$1  [R=permanent]

--
Desktop: 2.6.21-gentoo-r4 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
Laptop: 2.6.22-gentoo-r5 Mobile Intel(R) Pentium(R) 4 - M CPU 2.00GHz

sziasztok!

én egy olyan rewrite-t szeretnék megoldani, ahol a port is más igy gondolom valami más átirányitásra is szükségem van
maga a rewrite is picit máshogy lenne
jó néhány oldalt átolvastam
mindenhol olyan példákat találtam ahol
az olvasható linket /forum/611 átforditotta forum.php?id=611 -re például
nekem nagyából a forditott kellene de még a port is más

weben igy hivom meg:
forum.php?ID=23 és szeretném ezt ide átküldeni a nélkül hogy a forum.php meghivódjon localhost:1010/23/forum
igy lenne a sorrent

ezt hogyan tudom megcsinálni?

előre is köszönöm !

Hová javasoljátok tenni ?
nekem a sites-enabled/default fájlban van a részben
áttegyen a .htaccess -be?

itt viszont több kérdés is felmerül
a jelenlegi web root könyvtáramban nincs .htaccess
ha létrehozom kell-e valamit állitani az apache.conf -ban hogy beolvassa azt ?
illetve a .htaccess fájlba egyből lehet irni:
RewriteEngine on
stb ...

még annyi hogy honnan tudom, hogy biztosan be van töltve a mod_rewrite ?
mert a log megy tehát akkor gondolom be van tölltve

előre is köszi a segitséget !

odáig már eljutottam hogy már csak a ?= -t kellene kiszűrnöm

átdobna ide:

localhost:1010/?ID=89

ez jó az ID 89 de a ?ID= nem kellene nekem

^/forum\.php(.*) http://localhost:1010/$1

alakul, de szükségem lenne segitségre, hogy a ?ID= ne legyen ott csak ami az = jel után van
köszönöm

Sziasztok!

Sajnos akárhogy néztem, nem értettem meg a leírásokból sem a regex működését.
Egy rewrite kéne nekem is, méghozzá ilyen:

Eredeti url: http://server:2710/announce/pk/announce
Új url: http://server:2720/pk/announce

szerk:
A pk helyén egy 32 karakteres HASH áll. PL: ca9f70f0694097784affbd944567f335

Aki tud, kérem segítsen!

üdv

Szeretném megoldani, hogy a txt-ben felsorolt domaineket rewrite segítségével egy másik helyre irányítsak.
Működik, de csak akkor, ha fájlra pontosan felsorolom a referert a map txt-ben.
Én azonban azt szeretném, hogy http://domain.hu/valami/index.php helyett http://domain.hu/ elég legyen.

Virtualhostban ezek vannak:


RewriteEngine on
RewriteMap emap txt:/etc/apache2/refer.txt
RewriteCond %{HTTP_REFERER} !^-$
RewriteCond ${emap:%{HTTP_REFERER}} ^-$
RewriteCond %{REQUEST_FILENAME} (.*)$
RewriteRule ^(.*)$ http://celdomain.hu [R,L]

Referer.txt tartalma:
http://domain.hu/valami/index.php -

Próbáltam a txt-be regexet tenni. Módosítani a rewritecondot, de nem jártam sikerrel.
Megoldható valahogy?