Autor Zpráva
Neas
Profil
Ahoj,
mám nějakou složku (řekněme například www.example.cz/ahoj/) a chtěl bych docílit toho, aby když do prohlížeče napíši www.example.cz/ahoj/cokoli/ , aby se mi vždy načetl soubor index.php a slovo cokoli, aby se do něj odeslalo jako get proměnná (s možností načítat další get proměnné, například www.example.cz/ahoj/cokoli/&id=1)
hádám, že řešení mého problému skýtá soubor .htaccess, avšak kromě načítání chybových hlášek, šel tenhle soubor vždy trošku mimo mě.
Děkuji za pomoc
Kacko
Profil
http://www.easymodrewrite.com/guide-syntax
Neas
Profil
přesně to, co hledám.
Děkuji :)
Neas
Profil
tak jsem si článek přečetl a zkoušel jsem některé uvedené příklady. Stránka se sice přesměruje, ale GET proměnné se nepředají:
.htaccess:
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteRule ^articles/([0-9]+)$ articles.php?id=$1

articles.php:
<?php
echo isset($_GET['id']) ? $_GET['id'] : 'undefined';
echo '<br>přesměrováno';
?>

URL řádka:
http://www.domain.cz/articles/2
Davex
Profil
Pokud jsou soubory .htaccess a articles.php v kořenovém adresáři webu, tak mi připadá podivné, že by se parametr id nepředal. Nekazí to nějaká další pravidla?


Nebo se to rozbije tím, že má cesta stejný název jako skript a je zapnuté MultiViews, takže k přepisu nedojde a volá se přímo skript /articles.php/2. Zkus vypnout Options -MultiViews.
Neas
Profil
zkusil jsem ještě po přečtení článku z intervalu jinou variantu .htaccess, která již funguje:
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteRule ^(.*)/$ %{DOCUMENT_ROOT}/articles.php?id=$1 [L,QSA]

avšak nefunguje, když vynechám lomítko:
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/articles.php?id=$1 [L,QSA]

píše mi error 500.
nevíte někdo, proč? (nejspíš to chce jen úpravu regulárního výrazu, jen nevím, jakou)
EDIT: po vypnutí MultiViews také chyba 500
EDIT2:
tak jsem problém nakonec vyřešil:
RewriteEngine On
RewriteRule ^([a-zA-Z0-9\_\~\!\*\'\|\%\:\+\-]{1,255})/?$ %{DOCUMENT_ROOT}/blogs.php?blog=$1 [L,QSA]
Davex
Profil
Neas:
píše mi error 500.
nevíte někdo, proč?
Zacyklilo se to.

Nový regulární výraz neobsahuje v cestě tečku, a proto se už přepsané URL blogs.php znovu nepřepisuje. Běžně by se to řešilo podmíněným testem, aby se nepřepisovalo URL vedoucí k existujícímu souboru RewriteCond %{REQUEST_FILENAME} !-f nebo nepřepisovala již přepsaná adresa RewriteCond %{ENV:REDIRECT_STATUS} ="".

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0