Autor Zpráva
Ronny
Profil *
Zdravím, chci si udělat pěkné odkazy v url adrese. Vytvořil jsem si funkci, která mi řetězec predela na takovyto tvar: dnes-je-pondeli. V tabulce mam sloupec, do ktereho si takto upraveny retezec ukladam.
v httpd mám odkomentovaný tento řádek:
LoadModule rewrite_module modules/mod_rewrite.so
Pracuji na Apache2, PHP verze 5 a MySQl tatez verze 5.

V .htaccess mam tyto radky:
RewriteEngine On
RewriteRule ^clanek/([0-9]+)-([_a-zA-Z0-9-]+)$ %{DOCUMENT_ROOT}/clanky.php?id=$1&seo=$2 
[L,QSA]

nyni mam odkazy ve tvaru: index.php?seo=d-ssd-agsdgsd-gd
d-ssd-agsdgsd-gd.....nazev prispevku

Odkazy chci zobrazovat ve tvaru index.php/clanek/nazev-clanku

ale zatim mi to nejde... nevite prosim co bych ml kde jeste aktivovat nebo kde by mohla byti chyba? ...predem dekuji za prinosne reakce
bukaj
Profil
Ronny
Opravdu máš v .htaccess zapsáno, co jsi sem zkopíroval (včetně zachování řádkování)? Pak by totiž Apache měl hlásit chybu 500, protože dodatečné parametry k přepisu ([L,QSA]) musí být na stejné řádku jako RewriteRule.

Jestli se tedy teď server tváří jakoby nic, může se jednat o to, že v nastavní není povoleno měnit souborem .htaccess potřebné direktivy. Proto musíš v nastavení VirtualHosta, ve kterém chceš mít .htacces povolený mít:
AllowOverride All
#pokud by to ani po restaru Apache nezabralo, zkus odkomentovat následující řádek
#AccessFileName .htaccess


Teď by již mělo jít operovat v .htaccessu. Pokud chceš aby se ti adresa ve tvaru /index.php/clanek/nazev-clanku převedla na /index.php?seo=nazev-clanku:
RewriteEngine on
RewriteBase /
RewriteRule ^index.php/clanek/(.*)/?$ index.php?seo=$1 [L,QSA]


A samozřejmě je potřeba změnit odkazy na nové tvary. Jinak je tohle celé naprosto k ničemu :)
Ronny
Profil *
pockej, na kterem rdku by mel byt ten AllowOverride All?
Mam jich v httpd totiz vice....

<Directory "D:/web/prog/Apache2/Apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

tady? ...nebo kde priblizne
Ronny
Profil *
a ještě jedna věc - jak jsi myslel změnit odkazy na nové tvary? Já myslel že stačí získat do adersní řádky odkazy ve tvaru nejaky-odkaz, tzn. že jsem je prohnal funkcí, která z "Název-článku" udělala "nazev-clanku"

Nebo jak teedy upravit?
bukaj
Profil
Ronny
pockej, na kterem rdku by mel byt ten AllowOverride All?
Jak to mám asi vědět? Myslíš, že mám nějakou křišťálovou kouli, abych věděl, co máš na kterém řádku?

Musí to být mezi "tagy" <Directory "/cesta/k/document/root">....</Directory>. Takže bude potřeba si najít direktivu DocumentRoot a řídit se podle ní.

Nebo jak teedy upravit?
Myslel jsem tím, že pokud máš na stránce <a href="index.php?seo=blablabla">...</a>, že to musíš nahradit za <a href="/index.php/clanek/blablabla/">...</a>.
Ronny
Profil *
<Directory "D:/web/prog/Apache2/Apache2/cgi-bin">
AllowOverride All
Options None
Order allow,deny
Allow from all
</Directory>

tohle mam teda doplneny o to All, AccessFileName .htaccess odkomentovany...

a nic...

vubec... .htaccess mam vytvoreny jako txt soubor a v nem ty radky co jsi mi psal vyse a furt nic.... u vazne nevim co s tim...
bukaj
Profil
Ronny
<Directory "D:/web/prog/Apache2/Apache2/cgi-bin">
Takže ukládáš soubory, které se ti zobrazují, když zadáš do adresního řádku http://localhost/, do adresáře D:/web/prog/Apache2/Apache2/cgi-bin?

.htaccess mam vytvoreny jako txt soubor a v nem ty radky co jsi mi psal vyse a furt nic.... u vazne nevim co s tim...
Restartoval jsi server, že?

A doufám, že tím, že .htacces je vytvořený jako txt soubor, nemyslíš, že má příponu TXT. Je to bez přípony.
Ronny
Profil *
Kousek kodu, kde jsem to zmenil napodruhe - napoprve to bylo chybne:
DocumentRoot "D:/web/www"

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories). 
#
# First, we configure the "default" to be a very restrictive set of 
# features.  
#
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>


Restart Apache samozrejme sem provedl stene jako .htaccess nema priponu...

Nezobrazi se mi ani chybove hlaseni, proste nic... chybove hlaseni by se mi ale melo zobrazit, i kdyz jsem jeste neupravil ty odkaze, ze?
bukaj
Profil
Ronny
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

Tak tohle změň zase hezky zpátky. Protože se to vůbec netýká tohoto problému. Tohle, kvůli stromové struktuře adresářů a s ní svázané dědičnosti, může problém vyřešit, ale zaděláš si tím na mnoho dalších.

Když máš DocumentRoot nastaveno na "D:/web/www", dá rozum, že musíš hledat to, kde je <Directory "D:/web/www">, ne? A kdybys to nevěděl, tak jsi snad četl, že jsem psal: "Takže bude potřeba si najít direktivu DocumentRoot a řídit se podle ní." (A ne, nevím, na jakém řádku by to mohlo být.)

Nezobrazi se mi ani chybove hlaseni, proste nic... chybove hlaseni by se mi ale melo zobrazit, i kdyz jsem jeste neupravil ty odkaze, ze?
Právě že teď by se již chyba neměla zobrazovat. Teď by již všechno měl být v pořádku. A po zadání nového tvaru URL by se měly podstrkávat původní.

PS. Doporučuji se nad tím pořádně zamyslet. Zkoušet. Hledat na internetu. (Strýček google poradí.) A teprve pokud všechno selže, obracet se na diskusi.
Ronny
Profil *
No s tím hledáním <Directory "D:/web/www">, to v httpd.conf proste neni...

Nastavoval jsem si pouze DocumentRoot "D:/web/www" , a to je vse...

Poslu kousek textu, ve kterem se DocumentRoot "D:/web/www" nachazi, mam to v tom celem souboru tenhle retezec jen jednou...

DocumentRoot "D:/web/www"

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories). 
#
# First, we configure the "default" to be a very restrictive set of 
# features.  
#
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>


#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "D:/web/prog/Apache2/Apache2/htdocs">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all

</Directory>


Jinak se omlouvám za otravování, ale oprvadu se mi nedari tomu prijit na kloub... google je samozrejme prvni vec, ale vsude jsem nasel jen prikazy do htaccess, a co provedou s adresou URL, ale dalsi veci kolem toho takrka vubec, tak proto tady ta diskuze...
bukaj
Profil
Ronny
No s tím hledáním <Directory "D:/web/www">, to v httpd.conf proste neni...
Není? Tak snad přidám, ne? ;)
Ronny
Profil *
<Directory "D:/web/www" />
AllowOverride All
</Directory>

Takhle nejak? Pripadne pridat jako vsechno ostatni na uplny konec souboru nebo je to jedno?
bukaj
Profil
Ronny
<Directory "D:/web/www" />
<Directory "D:/web/www"> - Není tam na konci lomítko.

Pripadne pridat jako vsechno ostatni na uplny konec souboru nebo je to jedno?
Vpodstatě je to jedno, ale musíš to dát mezi příslušné "tagy" <VirtualHost ...>....</VirtualHost>. Pro nastavení localhostu to bude něco jako <VirtualHost *:80> či <VirtualHost localhost:80> nebo <VirtualHost 127.0.0.1:80>. Myslím, že to na úplném konci httpd.conf, pokud to tam je, nebude.

A doporučuji konfiguraci serveru rozdělit do více souborů, které budeš vkládat do httpd.conf pomocí direktivy Include (více poví příslušná dokumentace). Jinak, pokud budeš mít všechno v jednom souboru, v tom budeš mít neskutečný bordel.

Taky to vypadá, že máš httpd.conf dobře okomentovaný, tak proč si nepřečíst příslušné komentáře?
Ronny
Profil *
jj, bylo to na konci, nyní to ám takhle:
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common

<Directory "D:/web/www">
AllowOverride All
</Directory>

#</VirtualHost>


teď mi teda zbývá nastavit ještě tvar těch odkazů - nyní si nadpis článku vypisuji takhle:
<a href="index.php?seo='.$vypis["seo"].'">'.$vypis["nazev"].'</a>

čili jak jsi mi radil výše, tak by ten odkaz měl vypadat nějak takhle?
<a href="/index.php/clanek/$vypis["seo"]/">$vypis["nazev"]</a> ?
bukaj
Profil
Ronny
jj, bylo to na konci, nyní to ám takhle: ...
Ještě by bylo také dobré odkomentovat řádky, kde je <VirtualHost ...> a </VirtualHost>. (Tzn. odstranit ze začátku řádků křížek.)

čili jak jsi mi radil výše, tak by ten odkaz měl vypadat nějak takhle? ...
A proč to nezkusíš? Neboj, pokud to bude špatně, vůbec nic se nestane. Maximálně ti tak PHP vynadá. Nejspíš to bude trochu jinak, než tu máš ty. Uvozovky se mi moc nezdají. Jednoduše zkoušej a až to bude dělat to, co chceš, máš vyhráno.

Vypíše-li ti to nějaký Parse error, hlavně hned nechoď do diskuse, že ti to nefunguje. Zkus to nejdřív vyřešit sám. Přečti si chybu a snaž se napravit, co se PHP na kódu nelíbí.
Ronny
Profil *
tak na to koukam a mam odkaz ve tvaru co jsem psal... a pokazde kdyz na nej kliknu, v adresni radce mi nabehne odkaz ve tvaru ktery chci, ale na stranku se mi vypise phpinfo() s vlastnostmi .....
bukaj
Profil
Ronny
a pokazde kdyz na nej kliknu, v adresni radce mi nabehne odkaz ve tvaru ktery chci, ale na stranku se mi vypise phpinfo() s vlastnostmi
No, jedno víme. Rewrite (velice pravděpodobně) funguje :)

Teď to chce sednout si a hrát si. Hledat na internetu, zkoušet. Nejdříve jednoduché věci. A v případě jejich funkčnosti se vrhnout na těžší. Tento postup ti nakonec pomůže vyřešit problém, který máš.
Ronny
Profil *
ok, díky za pomoc, už aspoň vím jak to pořádně všechno nastavit ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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