Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][HTML]htaccess pytanie
Forum PHP.pl > Forum > Przedszkole
codeszan
Skorzystalem z generatora (Mod Rewrite Generator) znajdujacego sie:
http://www.generateit.net/mod-rewrite/index.php

Mam link: http://www.localhost:8080/system/panel/?s=test

Chcialbym osiagnac adres: http://www.localhost:8080/system/panel/s/test

Wygenerowałem cos takiego:

  1. RewriteEngine On
  2. RewriteRule ^s/([^/]*)\.html$ :8080/system/panel/?s=$1 [L]


lecz niestety nie dziala, prosil bym o prawidlowo wygenerowany wpis do pliku htaccess na którym będę mógł się potem wzorować.
trzczy
[APACHE] pobierz, plaintext
  1. RewriteEngine On
  2. RewriteCond %{SERVER_PORT} ^8080$
  3. RewriteCond %{QUERY_STRING} ^s=([a-zA-Z0-9]*)$
  4. RewriteRule ^system/panel/?$ www.localhost:8080/system/panel/s/%1? [L,R=301]
  5. #Zwraca "http://www.localhost:8080/system/panel/s/test"
[APACHE] pobierz, plaintext


.htaccess online test
codeszan
Mógłbym prosić o wyjaśnienie jeszcze jednego:

Jeśli katalog system zmienie na np. xsystem i podmienie ten element w regule to, przestaje ona dzialac?
  1. RewriteEngine On
  2. RewriteCond %{SERVER_PORT} ^8080$
  3. RewriteCond %{QUERY_STRING} ^s=([a-zA-Z0-9]*)$
  4. RewriteRule ^xsystem/panel/?$ www.localhost:8080/xsystem/panel/s/%1? [L,R=301]
trzczy
Wtedy bedzie działać w taki sposób, że adres
[APACHE] pobierz, plaintext
  1. http://www.localhost:8080/xsystem/panel/?s=test
[APACHE] pobierz, plaintext
będzie zamieniać na
[APACHE] pobierz, plaintext
  1. http://www.localhost:8080/xsystem/panel/s/test
[APACHE] pobierz, plaintext

codeszan
problem w tym, że
a) nie przechodzi nawet przez tester
cool.gif nie dziala tam gdzie chcialbym tego uzyc
trzczy
Może masz jakąś literówkę, bo tu przechodzi.
Tester
codeszan
Error 404

a może to kwestia jakiegoś http, czy www? (forma wpisywania) bo na to też są osobne reguly ponoc?

?s=test dziala poprawnie
trzczy
Tobie chyba chodzi o zamianę w odwrotną stronę. Nie A na B, tylko B na A.
codeszan
mam link
localhost:8080/system/panel/s?=test -- on dziala


localhost:8080/system/panel/s/test --chce uzyskac taki efekt ?

Co ciekawe taki link dziala:

localhost:8080/system/panel/?s/test
trzczy
Co to znaczy "mam link" oraz "uzyskać efekt"?
codeszan
Nie zbyt wiem jak to jeszcze bardziej sprecyzować ale postram się. Po kolei. Mam zainstalowany serwer lokalny - XAMPP. Korzystajac z skypa. Musialem zmienic port na inny wybralem 8080. Programy te dzialaj na jednym porcie. Standardowy "link" dla lokalnego serwera to laczenie przez ip czyli 127.0.0.1 lub localhost. Ja wykorzystywalem powyzsza nazwe.
Czyli link uzywany w przegladarce tam gdzie wpisuje sie zazwyczaj www.wp.pl czy www.google.pl jest teraz localhost:8080. Dalej na lokalnym serwerze stowrzylem projekt o nazwie "serwer". Jest on dostepny pod linkiem localhost:8080/serwer. W swoim projekcie uzylem przekierowan GET ktore wytworzyly mi adres o którym ciagle pisze i chce zmodyfikowac na tzw. przyjazny link jak to jest np. w wordpress.
Właśnie z adresu localhost:8080/serwer/panel/?s=test chce zrobic przyjazny link i to jest moj cel a efekt .. juz napisalem w poprzednim poscie.
viking
Trzczy pytał w jaki sposób te linki zapisujesz na stronie. Bo powinno być tak jak pisał w poprzednim poście o a i b.
Swoją drogą łatwiej było zmienić ustawienia skype niż przenosić serwer.
trzczy
Czyli w pasku adresu przeglądarki wpisujesz www.localhost:8080/system/panel/s/test i odpala plik .../system/panel/index.php i w php jest dostępna wartość $_GET['s'] wynosząca 'test'.

Powinno zadziałać pierwsze albo drugie rozwiązanie (oba przechodzą ten test online, ale nie mam pewności):
[APACHE] pobierz, plaintext
  1. RewriteEngine On
  2. RewriteCond %{SERVER_PORT} ^8080$
  3. RewriteRule ^system/panel/s/(\w+)$ system/panel?s=$1
  4.  
  5. #wyjściowy: "http://www.localhost:8080/system/panel/s/test"
  6. #docelowy: "http://www.localhost:8080/system/panel?s=test"
[APACHE] pobierz, plaintext

[APACHE] pobierz, plaintext
  1. RewriteEngine On
  2. RewriteCond %{SERVER_PORT} ^8080$
  3. RewriteRule ^system/panel/s/(\w+)$ www.localhost:8080/system/panel?s=$1
  4.  
  5. #wyjściowy: "http://www.localhost:8080/system/panel/s/test"
  6. #docelowy: "http://www.localhost:8080/system/panel?s=test"
[APACHE] pobierz, plaintext


http://htaccess.mwl.be?share=d90e76ac-4957...12-2cfdd7c7afad
http://htaccess.mwl.be?share=5f57bb6c-9415...67-48a08809d315

A może nawet ta linia z RewriteCond jest niepotrzebna.
codeszan
Cytat
Czyli w pasku adresu przeglądarki wpisujesz www.localhost:8080/system/panel/s/test i odpala plik .../system/panel/index.php


www.localhost:8080/system/panel/s/test i przenosi na
Nie znaleziono obiektu!
Nie znaleziono żądanego URL-a na tym serwerze. Jeśli wpisałeś URL-a ręcznie, sprawdź, czy się nie pomyliłeś.
Cytat
i odpala plik .../system/panel/index.php i w php jest dostępna wartość $_GET['s'] wynosząca 'test'.


zgadza sie

Cytat
#wyjściowy: "http://www.localhost:8080/system/panel/s/test"
#docelowy: "http://www.localhost:8080/system/panel?s=test"


jeśli dobrze dozumiem to wyjsciowy to jest to co juz mam a tak nie jest mam adres
http://www.localhost:8080/system/panel?s=test
czyli odwrotność tego co tu jest
viking
Gdzie masz plik index.php?
codeszan
plik index.php mam w folderze system czyli glowny folder projektu -- odpowiada za front
oraz
system/panel/index.php -- odpowada za panel

regułe którą próbujemy tu utworzyc chce by dzialala w panelu


plik htaccess jest w folderze system
viking
To w system/panel wrzuć .htaccess:
Kod
RewriteEngine On
RewriteRule ^s/(.*) index.php?s=$1 [NC,L]
trzczy
No to mam nadzieję, że zadziałało. Chciałem tylko dodać, że z punktu widzenia serwera oraz modułu rewrite to tu następuje zamiana adresu "system/panel/s/test" na "system/panel?s=test", czyli ten jest pierwotny albo wyjściowy: "system/panel/s/test"
codeszan
To co podał viking działa.

Po modyfikacji:

localhost:8080/system/panel/index.php?s=test
upraszcza do
localhost:8080/system/panel/test

  1. RewriteEngine On
  2. RewriteRule ^([^.]*)$ index.php?s=$1 [NC,L]



Pytanie:

co jeśli wpiszemy

1# localhost:8080/system/panel/test/ --czyli dodatkowo kreska na koncu?
2# localhost:8080/system/panel/index.php?s=test&a=bocian -- co jesli bylby drugi parametr?
3# localhost:8080/system/panel/index.php?s=test&a=bocian&id=123 --- co jesli bedzie jeszcze ruchome id?

Jak zapisać takie reguły?
Wycodząc od tego samego cały czas.
trzczy
Cytat(codeszan @ 18.08.2017, 22:53:44 ) *
Jak zapisać takie reguły?

To nie są reguły. Jeśli pytasz o regułę, to powinieneś napisać, że coś zamienia się na coś.
Np. 'system.panel/s/test' zamienia się na 'system.panel?s=test'

Najlepiej podać kilka przykładów zamiany.

Jeśli idzie o to, jak w regexie ująć fakt, że adres kończy się lub nie kończy ukośnikiem, to można to zapisać tak
[APACHE] pobierz, plaintext
  1. /?
[APACHE] pobierz, plaintext


viking
Najczęściej przepisuje się wszystko na index.php który wczytuje router a ten dalej odpowiednio przetwarza dane. Poczytaj trochę o MVC.
codeszan
Ok to inaczej jak zapisać "reguły":

(Przypadki które chciałbym wiedzieć jak zapisywać)

localhost:8080/system/panel/index.php?s=test NA localhost:8080/system/panel/test
localhost:8080/system/panel/index.php?s=test NA localhost:8080/system/panel/test/
localhost:8080/system/panel/index.php?s=test&id=123 NA l ocalhost:8080/system/panel/test/123
localhost:8080/system/panel/index.php?s=test&id=123 NA l ocalhost:8080/system/panel/test/123/
localhost:8080/system/panel/index.php?s=test&a=update NA localhost:8080/system/panel/test/update
localhost:8080/system/panel/index.php?s=test&a=update NA localhost:8080/system/panel/test/update/
localhost:8080/system/panel/index.php?s=test&a=update&id=123 NA localhost:8080/system/panel/test/update/123
localhost:8080/system/panel/index.php?s=test&a=update&id=123 NA localhost:8080/system/panel/test/update/123/


localhost:8080 -- ten element jest na localhost, na serwerze jakimś już go nie będzie więc czy w regule można go nie używać jak poprzednio?
Za pomocą generatora jestem w stanie wygenerować te reguły, lecz nie niałają one poprawnie ;/

Chce to wykonać w kodzie strukturalnym. Bez użycia mvc.
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.