Autor Zpráva
Misho3
Profil *
Zdravím

prosím Vás mohli by ste mi sem napísať ako mám presne urobiť .htaccess súbor aby to robilo nasledovné?

Mám adresu: http://www.nieco.nieco.com/index.php?p=hlas&id=1&t=a
a chcem aby to vyzeralo: http://nieco.nieco.com/hlas/1/a

a su pripady kedy je len /index.php?p=stranka -> /stranka

Ďakujem
l564
Profil
Neřeší se to náhodou zde?
Misho3
Profil *
ja neviem ale tam to moderátor zastavil ako vidím...

Neporadí niekto? pls
Taps
Profil
Misho3:
inspiruj se na http://mike.treba.cz/mod_rewrite-a-hezke-url-dil-ii/
Tirus
Profil
pomocí frameworku co jsem začal využívat z blackhole, je htacces takovýto

php_flag magic_quotes_gpc off
php_flag register_globals off
Options -Indexes
RewriteEngine on
# route all requests to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]


vše co je za adresou domény je v $_GET['route']
to si rozparsuješ a tak můžeš i dosáhnou pěkných URL
alp71
Profil
Snažím se také udělat hezké odkazy a inspiroval jsem se před časem mj. i touto diskusí.
Ke svému webu také připoji vlastní CRM ve složce "!adm", se kterou ale mám teď (nevím proč až po létech) problémy :-(
V .htaccess mám tento kód:
RewriteEngine on

RewriteBase /

RewriteRule ^css/.*$ - [PT]
RewriteRule ^lib/.*$ - [PT]
RewriteRule ^img/.*$ - [PT]
RewriteRule ^js/.*$ - [PT]
RewriteRule ^obr/.*$ - [PT]
RewriteRule ^doc/.*$ - [PT]
RewriteRule ^web/.*$ - [PT]

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

RewriteRule ^!adm/(.*)$ !adm/index.php?url=$1 [L,QSA]
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

Vlastní web funguje OK, ale když chci aplikovat CRM ve složce !adm (viz. předposlední řádek), tak mi to hází chybu 404 nebo chybu 500, když dám i do složky !adm .htaccess, který vypadá (zkráceně) takto:
RewriteEngine on

RewriteBase /!adm/

RewriteRule ^css/.*$ - [PT]
RewriteRule ^lib/.*$ - [PT]
# ... a spoustu dalších podobných

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

Vypadá to, jako by server přestal brát složku "!adm" jako skutečnou, či co.

Když to testuji na localhostu, tak mi to funguje, ale na hostingu to hází zmíněné chyby :-(
Něco mi někde uniká, ale nedaří se mi přijít na to kde a co?

Předem díky za jaýkoliv tip.
Kajman
Profil
Příště si založte vlastní vlákno. S tímto to nesouvisí!

Zkusil bych se podívat do error logu apache, tam bude chyba 500 lépe popsána.

Můžete zkusit
- vykřičník v reguláru raději ošetřit zpětným lomítkem
- přidat flag NE
- poradit se s hostingem, zda nezakázali (např. nějakou aktualizací web serveru) adresy obsahující vykřičník
Kajman
Profil
A ten 13.-18. řádek bych možná přepsal na
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^!adm/(.*)$ !adm/index.php?url=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
alp71
Profil
Děkuji moc za rady a omlouvám se za odchylku od tématu. Byl jsem zabrán do svého problému, uvědomil jsem si to až po odeslání. Můžete-li, tak toto vlákno přehoďte.

Nicméně... Pomohlo mi to jen částečně. Ale uvědomil jsem si, že vlastně potřebuju jen oddělit adresář "!adm" (pozn.: S tím otazníkem problém není, to jsem si otestoval).
Tj.: Když bude obsah REQUEST_URI začínat "!adm", tak se předá řízení do skutečného podadresáře !adm.
Ve všech ostatních případech se to přepíše pravidlem RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

Ale teď tápu, jak to napsat :-( Pravidlo (z ř.2 od Vás) jsem zkoušel postupně přepisovat na:
RewriteRule ^!adm(.*)$ - [L,QSA] nebo RewriteRule ^!adm/(.*)$ !adm/$1 [QSA,L] atd.,
ale funguje to jen když je v REQUEST_URI pouze "!adm". V momentě, kdy jsou tam další údaje (např.: "!adm/menu" nebo "!adm/menu.php" nebo i "!adm/?ulr=něco" < což požadovaný tvar) tak mi to hází chybu 404 (od .htaccess z rootu, k .htaccess v podadresáři !adm se to nedostane).
Kajman
Profil
Co je v .htaccess v adresáři !adm? On by měl mít totiž před hlavním přenost.
alp71
Profil
Ano, s tím souhalsím a na této skutečnosti jsem to měl postavený.
.htacces tam obsahuje to, co jsem uvedl výš, tedy:
RewriteEngine on
 
RewriteBase /!adm/
 
RewriteRule ^css/.*$ - [PT]
RewriteRule ^lib/.*$ - [PT]
# ... a spoustu dalších podobných
 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
Kajman
Profil
V tom případě by se přepisovací pravidla z nadřazeného adresáře neměla vůbec provádět pro url začínající na !adm/, protože apache nejprve najde pravidla v ní. Zkuste přidat podmínku na neexistující soubor, tedy před poslední řádek.

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

To by mohlo dříve dělat chyby 500 (zazyklení), ale to byste zjistil v tom error logu. Možná ale máte zamezení cyklení v těch spoustě dalších podobných pravidel, které nechcete poslat.

A je to normální hosting s běžnou konfigurací domén, nebo to je pošahané jako u wedosu a všechny domény chodí do jednoho místa a tam se to podle domény rozhazuje dále rewrite pravidly?
alp71
Profil
Ve "spoustě dalších podobných pravidel" je jen toto :-)
RewriteRule ^css/.*$ - [PT]
RewriteRule ^lib/.*$ - [PT]
RewriteRule ^../lib/.*$ - [PT]
RewriteRule ^img/.*$ - [PT]
RewriteRule ^../img/.*$ - [PT]
RewriteRule ^js/.*$ - [PT]
RewriteRule ^../js/.*$ - [PT]
RewriteRule ^fge/.*$ - [PT]
RewriteRule ^fonts/.*$ - [PT]
RewriteRule ^ckeditor/.*$ - [PT]
RewriteRule ^imgeditor/.*$ - [PT]

A, pravda, ještě řádek
Options -Indexes
který jsem teď na chvíli zakázal a ono se mi to rozběhlo :-o Nechápu :-o
Zkouknul jsem si teď obsahy .htaccess, u webů které mám na jiných hostingcích a tam mi to s tímhle pravidlem maká.

Zkusil jsem si to teď tady opakovaně povolit a zaremovat a je to opravdu tím. Omlovám se, příště nebudu kód zkracovat.

Tak snad pomůže tato inforamce někomu dalšímu, že Options může někdy, někde (tady se jednalo o pipni.cz) způsobit vyhazování 500.
Ještě jednou díky !!!
Kajman
Profil
Mohlo to být tím, že na tom hostingu není možné nastavení Indexes měnit v .htaccess, to by způsobilo chybu 500 a v error logu by bylo popsáno, z jakého důvodu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0