Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> mod-rewrite - przyjazne linki, problem z ilością zmiennych
powiatek
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 21.11.2007

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
prgTW
post
Post #2





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 10.09.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
Pozdrawiam
Tomasz Wójcik
..:: prgTW ::..
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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,


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
webdice
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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


Ten post edytował webdicepl 26.11.2007, 13:35:26
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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 think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 06:34