Autor | Zpráva | ||
---|---|---|---|
doktorzhor Profil |
#1 · Zasláno: 7. 11. 2011, 22:13:50
Mam dynamicky web, ktery se sklada jen z index.php ktery je v root serveru a do nej se vypisuje dynamicky obsah.
Web sam o sobe funguje tak jak ma, ale potrebuje vyresit podstrkavani a presmerovani v ModRewrite. Obsah je generovan v PHP parsovanim / v URL. Napr site.com/xxx/zzz . Popis jednotlivych pravidel: 1) pridani "www": site.com > www.site.com 2) odebrani "index.php": www.site.com/index.php > www.site.com 3) uvodni strna aby byla vzdy "/home": www.site.com > www.site.com/home 4) odebrani "/" na konci url: www.site.com/xxx/ > www.site.com/xxx 5) podstrceni prohlizeci soubor "index.php" za vsech okolnosti. V url zustane zadana adresa www.site.com/xxx/yyy ale misto toho se vzdy podstrci index.php. Princi fungovani webu ma sve duvody. Rad bych to vyresil pres Rewrite. vse by fungovalo kdyby posledni pravidlo neprovedlo vnitrni presmerovani -> dojde k opetovne kontrole pravidel a #2 opet odebere index.php, #5 jej zase podstrci... atd.. dojde k zacykleni. Pokud pravidlo #2 tak web funguje tak jak potrebuj, ale uvodni url je vyzdy index.php, coz nechci a zaroven potrebuji index.php podstrcit v #5. <IfModule mod_rewrite.c> ### Enables mod_rewrite RewriteEngine On Options +FollowSymlinks ### Sets the base folder of the site RewriteBase / # 1 ## site.com > www.site.com RewriteCond %{HTTP_HOST} ^mujweb.test$ RewriteRule (.*) http://www.mujweb.test/$1 [R=301,L] # 2a ## www.site.com/index.php > www.site.com/ RewriteCond %{REQUEST_URI} /index.php$ RewriteRule ^index.php$ http://www.mujweb.test/ [R=301,L] # 3 ## www.site.com > www.site.com/home RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^$ http://www.mujweb.test/home [R=301,L] # 4 ## odebere vzdy koncove / www.site.com/xxx/ > www.site.com/xxx RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_METHOD} GET RewriteRule (.+)/$ $1 [R=301,NE,L] # 5 ## pro fyzicky neexitujici soubory a slozky vzdy podstrci index.php # 5 koliduje s 2 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) index.php [L] </IfModule> |
||
Kajman_ Profil * |
#2 · Zasláno: 7. 11. 2011, 23:09:01 · Upravil/a: Moderátor (editace znemožněna) 31. 12. 2011, 20:03:50
Můžete kontrolovat REDIRECT_STATUS
# 2a ## www.site.com/index.php > www.site.com/ RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_METHOD} GET RewriteRule ^index\.php$ http://www.mujweb.test/ [R=301,L] Nebo přesměrovat v index.php dle $_SERVER["REQUEST_URI"]. //nechci index.php jen / if (stristr($_SERVER["REQUEST_URI"],'index.php') && (empty($_POST))) { header("Location: .str_replace('index.php','',$_SERVER['REQUEST_URI']),TRUE,301)]http://".$_SERVER["HTTP_HOST"].str_replace('index.php','',$_SERVER['REQUEST_URI']),TRUE,301); exit; } |
||
doktorzhor Profil |
#3 · Zasláno: 7. 11. 2011, 23:27:23 · Upravil/a: Moderátor (editace znemožněna) 31. 12. 2011, 20:04:11
Kajman:
No už mi to funguje (teda zatím to co jsem řešil), musím to ještě otestovat jetli to nedělá problémy jinde. Ale musel jsem odstranit RewriteCond %{REQUEST_METHOD} GET s tím to nefungovalo. Ten parametr %{ENV: } zatím moc neznám, ale dělá přesně to co potřebuju. RewriteCond: input='200' pattern='^$' => not-matched Děkuji mnohokrát Kajmane! |
||
Kajman_ Profil * |
#4 · Zasláno: 8. 11. 2011, 09:27:28
doktorzhor:
„Ale musel jsem odstranit“ To je divné, v pravidle 4 používáte tuto podmínku také. |
||
Časová prodleva: 2 měsíce
|
|||
začátečník Profil * |
#5 · Zasláno: 31. 12. 2011, 19:07:06
Právě jsem řešil stejný s odebráním indexu.php. Použil jsem postup uváděný #2 a nevím proč, ale při prostém ctrl+c a ctrl+v se %{REQUEST_METHOD} GET objeví jako %{REQUEST_MET-HOD} GET. Proto to patrně nefungovalo. Po smazání nadbytečné pomlčky uprostřed slova method vše funguje jak má.
|
||
Davex Profil |
#6 · Zasláno: 31. 12. 2011, 20:04:49
začátečník:
Díky za upozornění, opravil jsem. Byl tam schovaný rozdělovník (znak U+00AD nebo-li ­ ).
|
||
Časová prodleva: 12 let
|
0