Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rozbudowany mod_rewrite, jakaś rada?
soomal
post 17.06.2009, 20:47:33
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 4.03.2007

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


Piszę moduł do przyjaznych linków w oscommerce2 i zabija mnie ilość reguł rewrite w .htaccess, przez chaos w linkach na stronie (raz przekazywana nazwa kategorii, innym razem nie) muszę uwzglęniać każdą opcję.
Nie posiadam dużej wiedzy o regexp, więc jeśli te reguły można jakoś zoptymalizować to proszę o radę.
Np. taka nazwa produktu w pierwszej linii (.*?). Czy można zrobić w tym jakiegoś ifa (jeśli jest to przekaż nazwę do ?_cname_, a jak nie ma to olej).
Załączam fragment reguł. Aktualnie, żeby to dało się jakoś ogarnąć piszę sobię automat, którym mógłbym ogarnąć każdą permutację tych wartości, ale pytam czy nie ma prostszej drogi.
Fragment .htaccess:
  1. <?php
  2. RewriteRule ^kategoria/([0-9_]+)/produkt/([0-9_]+)/(.*?)/strona/([0-9]+)/na_strone/([0-9]+)$
  3. index.php?cPath=$1&products_id=$2&_pname_=$3&page=$4&prds_per_site=$5
  4. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9_]+)/(.*?)/strona/([0-9]+)$
  5. index.php?cPath=$1&_pname_=$2&page=$3&_pname_=$4
  6. RewriteRule ^kategoria/([0-9_]+)/produkt/([0-9_]+)/(.*?)/na_strone/([0-9]+)?$
  7. index.php?cPath=$1&_pname_=$2&prds_per_site=$3
  8. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9]+)/(.*)/typ/([0-9]+)/dodaj_do_koszyka$
  9. index.php?cPath=$1&products_id=$2&_pname_=$3&product_type=$4&action=buy_now
  10. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9]+)/typ/([0-9]+)/dodaj_do_koszyka$
  11. index.php?cPath=$1&products_id=$2&product_type=$3&action=buy_now
  12. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9]+)/(.*)/typ/([0-9]+)$
  13. index.php?cPath=$1&products_id=$2&_pname_=$3&product_type=$4
  14. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9]+)/typ/([0-9]+)$
  15. index.php?cPath=$1&products_id=$2&product_type=$3
  16. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9]+)/(.*)/kup$
  17. product_info.php?cPath=$1&products_id=$2&_pname_=$3&action=buy_now
  18. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9]+)/(.*)$
  19. index.php?cPath=$1&products_id=$2&_pname_=$3
  20. RewriteRule ^kategoria/([0-9]+)/produkt/([0-9_]+)$
  21. index.php?cPath=$1&products_id=$2
  22. ?>
Go to the top of the page
+Quote Post
Louner
post 17.06.2009, 20:58:22
Post #2





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 20.06.2005
Skąd: Bielsk Podlaski

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


Do .htaccess możesz wstawić taki wpis ( i tylko taki winksmiley.jpg, przepuszcza małe i wielkie litery alfabetu, cyfry, znak równości i podkreślenia ):
Kod
RewriteRule ^(/[_-a-zA-Z0-9=^\/]+)$ index.php?param=$1 [L]


Wszystko przejdzie do zmiennej $_GET['param']; Potem wystarczy w index.php załączyć kod php podobny do tego:

  1. <?php
  2. if( isset($_GET['param']) ) {
  3.    $fetch = explode('/',$_GET['param']);
  4.    $_PARAM = array();
  5.            
  6.    for( $i = 1; $i < count($fetch); $i += 2 ) {
  7.        @$_PARAM[$fetch[$i]] = $fetch[$i+1];
  8.    }
  9. }
  10. ?>


i ostatecznie w tablicy $_PARAM przy adresie:
/kategoria/5/produkt/6
otrzymasz:
  1. <?php
  2. $_PARAM['kategoria'] = 5;
  3. $_PARAM['produkt'] = 6;
  4. ?>


I tyle. smile.gif Chodzi o to, żeby cały adres przekazać do PHP i tam go przerabiać, a nie rozdrabniać się na wszystkie przypadki w .htaccess

Pozdrawiam

@soomal
Nie ma problemu. winksmiley.jpg

Ten post edytował Louner 17.06.2009, 21:06:47
Go to the top of the page
+Quote Post
soomal
post 17.06.2009, 21:05:55
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 4.03.2007

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


Dzięki za to rozwiązanie.
Go to the top of the page
+Quote Post
cojack
post 17.06.2009, 22:07:33
Post #4





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Przykład z drupala:
Kod
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Reszta tak jak Louner napisał.

Można też troszkę inaczej, ale każdy jak tam lubi.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
soomal
post 19.06.2009, 08:38:00
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 4.03.2007

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


Zapomniałem o jednej rzeczy. Po przepisaniu adresu w index.php potrzebuje przekierowania na konkretną stronę, ale tak, żeby adres w pasku nie zmienił się. Jak to uzyskać?
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 Wersja Lo-Fi Aktualny czas: 16.06.2025 - 21:45