Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [htaccess] zamiana , na / i pozbycie się .html
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam,

Napisałem sobie na potrzeby testów bardzo prosty kodzik i jakoś nie mogę sobie poradzić z tym htaccess-em. Chodzi o:

1. zamianę przecinków na slash-e tak żeby linki wyglądały jakby katalogi
2. jak usunę .html z końca adresu to kod się sypie

Może ktoś bardziej doświadczony w htaccess jest mi w stanie pomóc.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="pl">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. </head>
  7. <body>
  8. <ul>
  9. <li><a href='home.html'>Home</a></li>
  10. <li><a href='sklep.html'>Sklep</a>
  11. <ul>
  12. <li><a href='sklep,auta.html'>Auta</a>
  13. <ul>
  14. <li><a href='sklep,auta,osobowe.html'>Osobowe</a></li>
  15. <li><a href='sklep,auta,ciezarowe.html'>Ciężarowe</a></li>
  16. </ul>
  17. </li>
  18. <li><a href='sklep,motory.html'>Motory</a></li>
  19. </ul>
  20. </li>
  21. <li><a href='kontakt.html'>Kontakt</a></li>
  22. </ul>
  23. <div>
  24. <?php
  25. echo "URL1: ".$_GET['url1'].", URL2: ".$_GET['url2'].", URL3: ".$_GET['url3']."<br><br>";
  26. if(!empty($_GET['url3'])) {
  27. switch($_GET['url3']){
  28. case "osobowe": echo "Osobowe";
  29. break;
  30. case "ciezarowe": echo "Ciężarowe";
  31. break;
  32. }
  33. }
  34. elseif(!empty($_GET['url2'])) {
  35. switch($_GET['url2']){
  36. case "auta": echo "Auta";
  37. break;
  38. case "motory": echo "Motory";
  39. break;
  40. }
  41. }
  42. elseif(!empty($_GET['url1'])) {
  43. switch($_GET['url1']){
  44. case "home": echo "Home";
  45. break;
  46. case "sklep": echo "Sklep";
  47. break;
  48. case "kontakt": echo "Kontakt";
  49. break;
  50. }
  51. }
  52. else echo "Startowa";
  53. ?>
  54. </div>
  55. </body>
  56. </html>


i htaccess:

[htaccess]
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^(.*),(.*),(.*).html$ index.php?url1=$1&url2=$2&url3=$3 [L]
RewriteRule ^(.*),(.*).html$ index.php?url1=$1&url2=$2 [L]
RewriteRule ^(.*).html$ index.php?url1=$1 [L]
[/htaccess]

Pozdrawiam, Ł.
Jasioo
no więc po 1 musi być końcówka .html nie mozesz napisac index bez koncówki bo wyświetli Ci text źródłowy a nie stronę


w htaccess dodaj
  1. Options +FollowSymlinks
  2. RewriteEngine on
  3. RewriteRule ^([a-z0-9]+)$ $1.php


i zmień z index.html na index.php powinno śmigać. pozdrawiam wink.gif
lukash82
Witam ponownie,

Ale jak to się ma do powyższego przykładu?

Przecież są strony gdzie nie ma .html na końcu i jakoś to działa. I gdzie w tym rozwiązaniu jest zamiana , na /? Mogę prosić o wyjaśnienie bo może czegoś tu nie widzę...

Pozdrawiam, Ł.
Jasioo
Nie widać koncówek .html / .php bo jest to ustawione w regułce w htaccess

dokłądnie odpowiada za to

RewriteRule ^([a-z0-9]+)$ $1.html

a jeszcze dokładniej Mod_Rewrite końcówki same na końcu znikną a w menu:


  1. <li><a href='home.html'>Home</a></li>
  2. <li><a href='sklep.html'>Sklep</a>


wystarczy zmienic zamiast index.php na index:

  1. <li><a href='home'>Home</a></li>
  2. <li><a href='sklep'>Sklep</a>


wtedy bedzie czytało index.php a link będzie wyglądał następująco : www.domena.pl/index

dodatkowo jeśli ma wyświetlać home.html w linku : www.domena.pl/home

w htaccess wystarczy dodać

DirectoryIndex home.html

Pozdrawiam, Jasio wink.gif
lukash82
Ok, kumam czacze;)

Htaccess po zmianie wygląda tak i wszystko hula jak ta lala:

Options +FollowSymLinks
RewriteEngine On

DirectoryIndex index.php

RewriteRule ^([a-z0-9\-]+),([a-z0-9\-]+),([a-z0-9\-]+)$ $1,$2,$3.html
RewriteRule ^([a-z0-9\-]+),([a-z0-9\-]+)$ $1,$2.html
RewriteRule ^([a-z0-9\-]+)$ $1.html

RewriteRule ^(.*),(.*),(.*).html$ index.php?url1=$1&url2=$2&url3=$3 [L]
RewriteRule ^(.*),(.*).html$ index.php?url1=$1&url2=$2 [L]
RewriteRule ^(.*).html$ index.php?url1=$1 [L]


Teraz jeszcze jak obejść te przecinki, żeby działały jak slash-e? Próbowałem coś takiego ale dostaje 403 (w linkach też zmieniłem , na /)

RewriteRule ^(.*)\/(.*)\/(.*).html$ index.php?url1=$1&url2=$2&url3=$3 [L]
RewriteRule ^(.*)\/(.*).html$ index.php?url1=$1&url2=$2 [L]
RewriteRule ^(.*).html$ index.php?url1=$1 [L]

Jasioo
o coś takiego chodzi?


RewriteEngine on
RewriteCond %{NAZWAPLIKU} !-d
RewriteCond %{NAZWAPLIKU}\.html -f
RewriteRule ^([^/]+)/$ $1.html


RewriteCond %{NAZWAPLIKU} !-f
RewriteCond %{NAZWAPLIKU} !-d
RewriteCond %{URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
lukash82
Hmmm... Wygląda to jak egipskie hieroglify, hehe

Dostaję info o pętli przekierowań...

Ok. Działa mi taki zapis
RewriteRule (.*)/(.*)/(.*)$ index.php?url1=$1&url2=$2&url3=$3 [L]

dla takiego linka:
<li><a href='sklep/auta/osobowe'>Link 1</a>

Ale jak już dodam jakiś krótszy dodatkow zapis (jakby katalog wyżej):
RewriteRule (.*)/(.*)$ index.php?url1=$1&url2=$2&url3=$3 [L]
<li><a href='sklep/auta'>Link 1</a>

To dzieją się cuda... Do url1 dopisuje się po każdym kliknięciu kolejny link i tym samym nie otrzymuję wyniku zapytania... Juz brak mi siły do tego...

Znalazłem taki dosyć fajny opis htaccess-a, może się komuś to przyda: http://magazynt3.pl/htaccess-bez-tajemnic-...erwerem-Apache/

Ale niestety nie ma tam rozwiązania mojego problemu w całości...

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.