Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przyjazne adresy, htaccess
Forum PHP.pl > Forum > PHP
yaro84
Witam

Stworzyłem i nadal tworzę prostą stronę internetową, przy której chciałbym wykorzystać plik htaccess do przyjaznych adresów. Nie działa mi jednak przepisanie. Czy mógłby mi ktoś podpowiedzieć gdzie jest błąd. Wszytko odbywa się póki co na serwerze lokalnym xampp.

Adres wyświetlający się w przeglądarce to:

znajdz-produkt?produkt=nazwaproduktu


Chciałbym żeby ten adres wyglądał tak:

znajdz-produkt/produkt/nazwaproduktu



Kod w pliku htaccess jest następujący:

### PROTECT FILES ###
<FilesMatch "\.(htaccess|htpasswd|ini|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

Options FollowSymLinks
RewriteEngine On
Options -Indexes
DirectoryIndex index.php
RewriteRule znajdz-produkt znajdz.php
RewriteRule ^index.html$ index.php
RewriteRule ^znajdz-produkt/produkt/([^-]*)$ znajdz-produkt?produkt=$1 [L]



Prośba o podpowiedź.
kayman
poczytaj o routingu bo imo w ogóle źle się do tego zabierasz a przykładów jest milion

po krótce index.php->routing(skrypt/klasa/funkcja rozpoznająca parametry z url i dobierająca kod do wykonania)->wykonanie

i przykład RewriteRule ^znajdz-produkt/([A-Za-z0-9-]+)$ index.php?action=findProduct&produkt=$1 [L]

gdzie

action -> skrypt wykonujący w tym wypadku findProduct
produkt -> to czego szukamy
trueblue
A czy adresy na Twojej stronie (w kodzie html) wyglądają tak: znajdz-produkt/produkt/nazwaproduktu czy tak: znajdz-produkt?produkt=nazwaproduktu?
Pilsener
Cytat
chciałbym wykorzystać plik htaccess do przyjaznych adresów
- zły pomysł, bo:
- każda zmiana adresu to zmiana .htaccess
- trudność w debugowaniu (gdy coś nie działa)
Uzupełnię to co napisał kayman:
1. Aplikacja ma jeden punkt wejścia (zazwyczaj public/index.php) gdzie trafiają wszystkie adresy typu .pl/cos-tam-ktos,23.html, .htaccess jedynie przekierowuje wszystkie URLe na ten punkt.
2. Adresy są kodowane i dekodowane przez coś, co się nazywa Router, zasady sobie określasz sam, np. moduł/kontroler/akcja albo /nazwa/parametr

Reasumując: URLe piszesz w PHP a nie .htaccess.
yaro84
Cytat(trueblue @ 17.11.2016, 20:13:13 ) *
A czy adresy na Twojej stronie (w kodzie html) wyglądają tak: znajdz-produkt/produkt/nazwaproduktu czy tak: znajdz-produkt?produkt=nazwaproduktu?


Adres wygląda: znajdz-produkt?produkt=nazwaproduktu
Nie wiem za bardzo jak zamienić go na tą pierwszą postać...
trueblue
Po prostu zmień.
Przyjazne linki działają w ten sposób, że w kodzie mają być umieszczone właśnie w takiej postaci, a zadaniem .htaccess czy routera jest ich "obróbka".
yaro84
W pliku index.php mam taki odnośnik do pliku znajdz.php. Po kliknięciu w nazwę produktu w index.php następuje przekierowanie do do pliku znajdz.php z nazwą produktu. Tylko postać linku chciałbym zmienić...

  1. <a href="znajdz-produkt?produkt=nazwaproduktu"> nazwa produktu </a>


W pliku htaccess mam
RewriteRule znajdz-produkt znajdz.php


trueblue
Jeszcze raz napiszę, to zmień ten link.
yaro84
Tylko jak zmienię link i chcę przesłać zmienną, to i tak w linku zostanie dopisana "formuła" ....?produkt=nazwaproduktu?

"trueblue" nie podałbyś jakiegoś wzoru, przykładu?

pzdr
Niree
Cytat
Adres wyświetlający się w przeglądarce to:

znajdz-produkt?produkt=nazwaproduktu


Chciałbym żeby ten adres wyglądał tak:

znajdz-produkt/produkt/nazwaproduktu


  1. RewriteRule znajdz-produkt/produkt/(.*) znajdz-produkt?produkt=$1


Próbuj. Też miałem przed chwilą problem z mod_rewrite i to wyżej mi zadziałało. Co istotne, zmień adresy na znajdz-produkt/produkt/blabla a nie zmienne ?produkt=blabla
pakolord
jak Ci potrzeba tylko w tym przypadku to proponuje skorzystać z generatora
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.