Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mod-rewrite - przyjazne linki, problem z ilością zmiennych
Forum PHP.pl > Forum > Serwery WWW > Apache
powiatek
Witam

Mam problem z taką komendą w .htaccess:

RewriteEngine on
RewriteRule ^prezenty_([^-]*)/([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*).html$ index.php?a=$1&b=$2&c=$3&d=$4&e=$5&f=$6&g=$7&h=$8&i=$9&j=$10&k=$11

Mam problem powyżej '$9', czyli ze zmiennymi '$10' i '$11'. Zamiast je pobierać z adresu pobiera mi '$1' i na końcu niej daje '0' w przypadku pierwszej a w przypadku drugiej '1'.
Może podam przykład. Załóżmy, że:
$1=kot
$10=samolot
$11=wiadro
Jeżeli pobieram od $1-9 to jest ok i wyświetla je prawidłowo ale kiedy pobieram '$10' to zamiast 'samolot' wyświetla mi 'kot0' a gdy pobieram '$11' to zamiast 'wiadro' wyświetla 'kot1'. Czyli np. w $10 podstawia $1+0.

Czy linki można zamieniać na bardziej przyjazne maksymalnie do 9 zmiennych?
Serwer mam na home.pl

Z góry dzięki za pomoc!
prgTW
OMG!

  1. RewriteEngine On
  2. RewriteRule (.*) index.php?uri=$1


w $_GET['uri'] masz całe żądanie, teraz sobie przeparsuj to jakos (np. http://pl2.php.net/parse_url) i przez PHP kontroluj zakresy i wszystko co chcesz
- przenosne (portable)
- uniwersalne
- dajace duzo wieksza kontrole
Cysiaczek
Podepnę sie tutaj, bo problem dotyczy właśnie przekierowania.
na początek - rewrite
  1. RewriteBase /directory
  2.  
  3. RewriteRule (.*) index.php?url=$1
  4. //lub
  5. RewriteRule ^(.*)$ index.php?url=$1
  6. //lub
  7. RewriteRule ^(.*)$ /index.php?url=$1
  8. //lub
  9. RewriteRule ^(.*)$ index.php?url=$1 [QSA]
  10. //lub
  11. RewriteRule ^(.*)$ index.php?url=$1 [L]
  12.  
  13. //i jeszcze inne kombinacje


.htaccess znajduje się w http://www.domena.pl/directory

W czym problem?
Ano. Taki wywołanie
http://www.domena.pl/directory
Powoduje błąd Bad Request (404)

Takie działa poprawnie
http://www.domena.pl/directory/

Czy ktoś mógłby mi wyjaśnić, dlaczego na niektórych serwerach podanie tego slasha na końcu jest konieczne?
Jeśli da się jakoś to obejść, to proszę o nakierowanie mnie.
Słaby jestem z rewritów niestety.

Pozdrawiam,
webdice
Powodów może być wiele, trudno powiedzieć, osobiście nie spotkałem się z czymś takim. Na razie przychodzi mi do głowy że mod_rewrite na niektórych serwerach traktuje directory jako katalog, spróbuj dodać:

Kod
RewriteCond %{REQUEST_FILENAME} !-d


EDIT: Testując na na jednym serwerze zauważyłem że po wpisaniu domena.pl/test dopisywany jest slash na końcu adresu, zaś testując na innym serwerze po wpisaniu takiego samego adresu slash nie zostaje dopisany i wyskakuje bad request. Być może błąd leży po stronie konfiguracji serwera, ale tak jak napisałem wyżej regułka RewriteCond powinna pomóc. Możesz dodatkowo dodać:

Kod
RewriteCond %{REQUEST_FILENAME} !-f
Cysiaczek
Metodą ślepego posłuszeństwa dodałem

  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d


Działa. Dzięki ~webdicepl i ~Sh4dow

--edit
  1. RewriteCond %{REQUEST_FILENAME} !-d


Tak lepiej - !-f powoduje, że nie jest wysyłana ?url=$1

Pozdrawiam.
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.