Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: RewriteRule z dwoma zmiennymi (.htaccess)
Forum PHP.pl > Forum > PHP
ehhh0
Mam taki link na swojej stronie:
test.php?zmienna1=COSTAM1&zmienna2=COSTAM2

Potrzebuję przekierować taki link na ten powyższy:
COSTAM1.ini?zmienna2=COSTAM2

Czyli ogólnie ktoś wpisuje mojastrona.pl/COSTAM1.ini?zmienna2=COSTAM2 a w .htaccess przekierowywuje mnie na:
test.php?zmienna1=COSTAM1&zmienna2=COSTAM2.

Jak to zrobić? Próbowałem już masę kodów, nie działa ;/. Ostatnio co napisałem to:

  1. RewriteEngine On
  2. RewriteRule ^(.*).ini?zmienna2=^(.*)$ test.php?zmienna1=$1&zmienna2=$2 [L]


No i nie działa. Co robię źle? Czytałem też o RewriteCond i {QUERY_STRING} (np. na tej stronie), ale nie wiem jak to zastosować... Pomoże ktoś?
erix
A próbowałeś dostosować podany tam przeze mnie przykład?

Bo to jest rozwiązanie Twojego problemu.
ehhh0
Próbowałem, nie wychodzi.
  1. RewriteEngine On
  2. RewriteCond %{QUERY_STRING} zmienna1=([^&;]*)
  3. RewriteCond %{QUERY_STRING} zmienna2=([^&;]*)
  4. RewriteRule . %1.ini?=zmienna2=%2 [R=301]

Takie coś zrobiłem ale kompletnie nie wiem gdzie mam wstawić, że ma przekierować na test.php (może zamiast tej kropki po RewriteRule ale jak to umieścić?). Pomożesz?
erix
Poczytaj najpierw tutoriale od mod_rewrite, bo to są absolutne podstawy.
ehhh0
Tak wiem - są to podstawy. Z jedną zmienną mi wszystko pięknie wychodziło. Jak dodałem drugą (w 1 poście jest jak to zrobiłem) to już nie działało. Czytałem na necie cały dzień - za chiny ludowe nie chce mi działać :/. Ja wiem, że wygląda to tak, że oczekuję gotowego kodu, ale naprawdę już nie wiem co robię źle. Szukałem na internecie, próbowałem masę przykładów i nic. Może podałbyś chociaż gdzie robię błąd? Albo nakierował?
Skoro Ty stworzyłeś ten przykład to dla Ciebie minuta roboty, a ja już siedzę przy tym którąś godzinę z kolei...
Będę zobowiązany za pomoc.
thek
Podpowiem... Ty lepiej sobie popatrz co nam powiedziałeś, że chcesz uzyskać jako wywołanie ostateczne i porównaj z tym co w RewriteRule żeś wysmarował.
Nie uzyskasz z
RewriteRule . %1.ini?=zmienna2=%2
wzorca dla
COSTAM1.ini?zmienna2=COSTAM2

Popatrz dokładnie czemu one się nie zgadzają i zerknij, tak jak radzi erix, do dokumentacji odnośnie użycia RewriteCond. Masz drobne błędy w RewriteRule i to one Ci psują humor.
ehhh0
Ja nie wiem, albo jestem tak głupi że nie wiem albo to jest takie trudne.
Próbowałem tak:
  1. RewriteEngine On
  2. RewriteCond %{QUERY_STRING} url=([^&;]*)
  3. RewriteCond %{QUERY_STRING} start=([^&;]*)
  4. RewriteRule ^test.php$ %1.ini%2 [R=301]

Nie działa. Próbowałem tak:
  1. RewriteEngine On
  2. RewriteCond %{QUERY_STRING} url=([^&;]*)
  3. RewriteCond %{QUERY_STRING} start=([^&;]*)
  4. RewriteRule ^%2.ini%1$ test.php%1%2 [R=301]

Dalej nic. Jednak sam kod z jedną zmienną:
  1. RewriteEngine On
  2. RewriteRule ^(.*).ini$ test.php?zmienna1=$1 [L]

Śmiga bez problemu. Co robię źle? Pierwsze dwa kody myślę, że dostosowałem do przykładów - i dalej nic...
erix
Bo będzie śmigać.

Cytat
[APACHE] pobierz, plaintext
  1. RewriteRule ^%2.ini%1$ test.php%1%2 [R=301]
[APACHE] pobierz, plaintext

Dlaczego poszukujesz tutaj w adresie odwołania, które nie istnieje? Zostaw lewą część konstrukcji, bo to jakbyś walił młotkiem w łapę i miał pretensje, dlaczego boli.
thek
Podpowiem znowu... Masz 2 możliwości:
1. Weź swój pierwszy kod pod tekstem "Próbowałem tak:" i pomyśl co jest nie tak
2. Użyj tylko jednego RewriteCond, który przechwyci nazwę pliku ini oraz zapoznaj się z flagą QSA.
To drugie trochę "na odwal się", ale skoro z jednym parametrem umiesz, a z dwoma nie to może Ci przypadnie to rozwiązanie do gustu.
ehhh0
No, wreszcie rozwiązałem swój problem gdy użytkownik thek napisał coś o fladze QSA biggrin.gif. Kod:
  1. RewriteEngine On
  2. RewriteRule ^(.*).ini$ test.php?zmienna1=$1 [QSA]

Wszystko pięknie działa. Szkoda tylko, że nie wiem co robiłem wcześniej źle, ale skoro to działa to już mi nie potrzebne. Dzięki za pomoc.
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.