Autor Zpráva
Domxxx
Profil *
Asi je to jednoduchý, ale popravdě, raději si nechám poradit...

mám toto pravidlo:

# route all requests to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L]


Chtěl bych k němu přidat následující:
Jestliže uživatel zadá do URL řetězec ve tvaru http://mojedomena.xyz/index/, nebo http://mojedomena.xyz/index/index/, nebo http://mojedomena.xyz/index

(index se může opakovat několikrát, s nebo bez lomítka) bude přesměrován na http://mojedomena.xyz/.

Děkuji, Dom

Moderátor Davex: Vkládej prosím výpisy mezi značky [pre] a [/pre] (stačí kliknout na ).
Davex
Profil
Před všechna původní pravidla stačí přidat
RewriteRule  ^/?(index/)*index/?$  http://mojedomena.xyz/  [NC,L]
Domxxx
Profil *
Díky moc!

Bylo by prosím možné ještě nějak nahradit http://mojedomena.xyz/ za nějakou "konstantu", jako je např. ["HTTP_HOST"]?

Děkuji předem!
Kajman_
Profil *
Možná by to šlo díky RewriteBase
RewriteBase /
RewriteRule  ^/?(index/)*index/?$  /  [NC,L,R]
Domxxx
Profil *
Vyzkouším :-)

Jen mi není jasný, proč je ve výrazu
^/?(index/)*index/?$
na začátku
/?
, má tam to lomítko nějaký význam?
Kajman_
Profil *
Nejsem si jistý, ale pokud používáte rewrite pravidla přímo v konfiguraci apache, tak tam úvodní lomítko je. Pokud v .htacces, tak není. Proto asi Davex udělal nepovinné úvodní lomítko, aby nezáleželo na tom, kde to pravidlo máte.
Davex
Profil
Kajman:
Přesně tak, takto je pravidlo univerzálnější a lze ho použít přímo v konfiguraci Apache, když není omezena platnost na adresář.
Domxxx
Profil *
Super, díky, funguje to a díky za objasnění.
Jinak, používám to v .htaccess.
Domxxx
Profil *
Ještě toto téma otevřu a poprosím o pomoc...

Chtěl bych na konec URL, pokud chybí, přidat "/" (v .htaccess). Lámu si s tím hlavu docela dlouho...

Mám prozatím tento kód, ale nefunguje správně...

Options -Indexes

RewriteEngine on

RewriteBase /

RewriteRule  ^(index/)*index/?$  /  [NC,L,R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [L,R=301]

RewriteRule ^(.*)$ index.php?route=$1 [L]


Problém je, že se mi do QUERY_STRING ukládá route=index.php (což bych řekl, že nastává po
RewriteRule ^(.*)$ /$1/ [L,R=301]
) a myslím si, že bych do
RewriteCond %{REQUEST_URI} !index.php
měl dosadit místo index.php něco jako index.php=(.*).

Děkuju předem.
Davex
Profil
Mělo by to jít takto:
RewriteEngine on
RewriteBase /

RewriteRule  ^(index/)*index/?$  /  [NC,L,R]

RewriteRule  ^([^.]*[^/])$  $1/  [L,R]

RewriteCond  %{REQUEST_FILENAME}  !-f
RewriteCond  %{REQUEST_FILENAME}  !-d
RewriteRule  ^(.*)$  index.php?route=$1  [L]

Po odzkoušení bych ještě nahradil příznaky R za R=301.
Domxxx
Profil *
Smekám :-)
Máte u mě virtuální pivo! :-)

PS: nastudoval jste to v oficiální dokumentaci, nebo máte nějaký dobrý ověřený zdroj? Nebo prostě jen zkušenost... (což určitě z velké části ano...)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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