Autor Zpráva
doktorzhor
Profil
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 *
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
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 *
doktorzhor:
Ale musel jsem odstranit
To je divné, v pravidle 4 používáte tuto podmínku také.
začátečník
Profil *
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_MET­HOD} 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
začátečník:
Díky za upozornění, opravil jsem. Byl tam schovaný rozdělovník (znak U+00AD nebo-li &shy;).

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0