Autor | Zpráva | ||
---|---|---|---|
JanS01 Profil |
Dobrý den,
předem se hluboce omlouvám, že jsem založil nové téma na již milionkrát omývané téma(i já sám jsem se tomu musel zasmát), ale i přes veškerou moji snahu, kdy jsem hledal jak zde na foru tak i na jiných webech, se mi nepodařilo vytvořit pěknou url (vyzkoušel jsem asi 50 verzí, které jsem si i sám přepisoval a opravoval). Mám LAMP server na netbooku distribude Ubuntu 12.04LTS, Apache2, PHP5 atd:. projekty ukládám do adresáře /var/www/nazev_projektu, mod_rewrite mám povoleno, zapnuto a funkční. V současné době mám adresu v tomto tvaru http://localhost/projekt/?co=informace a místo toho chci dostat http://localhost/projekt/informace/. <a href="?co=uvod">Úvodní stránka</a> <?php if (!isset($_GET['co'])) { $_GET['co'] = "uvod"; } switch ($_GET['co']) { case "uvod": include 'pages/uvod.php'; break; atd:. /etc/apache2/sites-available/default <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost> Nevím kde dělám chybu, ale po týdnu zbytečného snažení jsem se rozhodnul zde požádat o pomoc. Všechny varianty RewriteRule co jsou zde na foru na prvních 7 stránkách jsem vyzkoušel a bezúspěšně, možná si jen špatně předávám parametr, nebo pracuji špatně s odkazem, ale po tom množství co jsem vyzkoušel a nešlo to si radši nechám poradit i kdyby mě to mělo stát trošku zdravé kritiky. |
||
Kajman Profil |
Do adresáře projekt dejte .htaccess
RewriteEngine On RewriteRule ^([^/]*)/$ index.php?co=$1 [L] Pak se může odkazovat např. takto <a href="/projekt/uvod/">Úvodní stránka</a> Ale pro jednodušší stěhování webu bude lepší, když si uděláte např. proměnnou s tím prefixem /projekt/ a budete ji přidávat do všech adres (i pro obrázky, javascripty, styly). |
||
JanS01 Profil |
#3 · Zasláno: 19. 6. 2013, 20:27:52
Kajman:
Adresářovou strukturu mám: ve složce pages mám všechny soubory které includuji v indexu, tedy na hlavní stránce. RewriteEngine On RewriteRule ^([^/]*)/$ index.php?co=$1 [L] Pak se může odkazovat např. takto <a href="/projekt/uvod/">Úvodní stránka</a> Pokud použiju tento kod v odkazu tak proč bych do .htaccess psal index.php?co=$1 ? nebo musím ještě přepsat switch pro include ? Zatím používám tohle <?php if (!isset($_GET['co'])) { $_GET['co'] = "uvod"; } switch ($_GET['co']) { case "uvod": include 'pages/uvod.php'; break; atd:. když jsem se snažil includovat stránku po dotazu ve stylu if($_GET["/projekt/uvod"]) [Wed Jun 19 20:00:24 2013] [error] [client 127.0.0.1] File does not exist: /var/www/projekt/uvod, referer: http://localhost/projekt/uvod/ [Wed Jun 19 20:00:24 2013] [error] [client 127.0.0.1] File does not exist: /var/www/404.html, referer: http://localhost/projekt/uvod/ |
||
Kajman Profil |
#4 · Zasláno: 19. 6. 2013, 20:44:01
Nepsal jsem nic o tom, že by bylo potřeba měnit index.php, ten jste si měl nechat stejný. Stačí vložit ten .htaccess a opravit url.
„přes $_GET['co'], kterou ale ve vámi napsaném odkazu nevidím“ Uniklo Vám index.php?co=$1 viz. Mod_rewrite » Proměnné z regulárů
|
||
JanS01 Profil |
#5 · Zasláno: 19. 6. 2013, 21:07:43
Kajman:
Já jsem si nebyl jistý takže jsem vyzkoušel, to jak jste mi to napsal a pak jsem pro jistotu vyzkoušel i ostatní varianty, ale bezúspěšně. proto jsem se radši zeptal, zkusím si s tím ještě pohrát, třeba jsem se někde přehlédnul nebo přepsal, ale pokud znáte další možnosti jak toho docílit budu rád a každou radu uvítám, u mod_rewritu jsem špatně pochopil proměné díky za odkaz |
||
Kajman Profil |
#6 · Zasláno: 19. 6. 2013, 21:39:09
Takže Vám funguje adresa http://localhost/projekt/?co=uvod a když dáte do .htaccess uvedený kód (pozor, chvíli v něm chyběla hvězdička), zadáte adresu http://localhost/projekt/uvod/ tak se zobrazí co?
|
||
JanS01 Profil |
#7 · Zasláno: 19. 6. 2013, 22:28:00
Odkaz
<a href="/projekt/uvod/">Úvodní stránka</a> Include <?php if (!isset($_GET['co'])) { $_GET['co'] = "uvod"; } switch ($_GET['co']) { case "uvod": include 'pages/uvod.php'; break; .htaccess RewriteEngine On RewriteRule ^([^/]*)/$ index.php?co=$1 [L] [Wed Jun 19 22:17:12 2013] [error] [client 127.0.0.1] File does not exist: /var/www/projekt/uvod, referer: http://localhost/projekt/uvod/ [Wed Jun 19 22:17:12 2013] [error] [client 127.0.0.1] File does not exist: /var/www/404.html, referer: http://localhost/projekt/uvod/ uvod se mi načte ale bez stylování a obrázků a to jen díky if (!isset($_GET['co'])) { $_GET['co'] = "uvod"; } a i když si nechám vypsat chyby tak se žádná neobjeví <?php ini_set("display_errors", 1); //nepouzivejte v PHP4 error_reporting(E_ALL); ?> |
||
Kajman Profil |
#8 · Zasláno: 19. 6. 2013, 23:17:32
JanS01:
„uvod se mi načte ale bez stylování a obrázků“ Styly a obrázky si musíte správně odkázat z nově vytvořené virtuální adresářové struktury, viz. [#2] případně viz. Mod_rewrite » Bacha na interpretaci cest |
||
JanS01 Profil |
#9 · Zasláno: 20. 6. 2013, 14:04:53
Tak jsem přepsal cesty -> stačilo doplnit název projektu a všechny odkazy fungují jak jsem chtěl, v error logu mi to už žádné chyby nehází, switch jsem nechal původní co jsem měl.
Za cool url vám mnohokrát děkuji, kdybych si uvědomil už před tím, že po rewrite modu jsou alternativní cesty, dávno bych to měl, ale chybami se člověk učí :D. CHtěl bych se ještě zeptat jak na dynamický title <TITLE> (pokud mám index pouze pro include hlavičky, patičky a prostředku tak vím jak na to, ale tohle je trošku jinačí případ) mám stránku index.php kde mám thml tag head a v něm title a pak si jen uprostřed stránky includuji stránky(přes switch jak jsem psal výše), po všech pokusách mě funguje pouze tento kod, který dám na začátek každé incluidované stránky <script language="javascript"> document.title = "Text který se zobrazí v html tagu TITLE"; </script> Další a již finální otázkou je jak při vyhledávání na serveru google zajistit aby po zadání názvu stránky, se vypsali i podstránky, např download kontakt atd:. jako je tomu např u seznamu (slovník atd) |
||
JanS01 Profil |
#10 · Zasláno: 21. 6. 2013, 15:29:42
Takže můj poslední dotaz jsem si zodpověděl sám. Jedná se o google podstránky viz. http://support.google.com/webmasters/bin/answer.py?hl=cs&answer=47334, které se generují automaticky, takže to moc ovlivnit nemohu.
A pro generování dynamického title stačilo v indexu použít na začátku switch v kterém jsem si hlídal zvolenou stránku a pro každou stránku jsem měl case kde byl byla příslušná proměná title. |
||
Časová prodleva: 11 let
|
0