Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> .htaccess problem 2 zbieżnych reguł ..
radziu
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.03.2009

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


Witam kolegów smile.gif
Mam drobny kłopot i pomimo starań i prób nie udało mi się zamemu tego zrobić, mianowicie:


Mam 2 reguły przepisywania linków i chciałbym aby obie działały, ale nie potrafię sobie z tym poradzić:

--
RewriteEngine on


RewriteRule ^(.*)/([0-9]+)/(.*)\.html$ /auto.php?id=$2&uri=$3 [QSA,L]
RewriteRule ^(.*)/([0-9]+)/(.*)\.html$ /strona.php?id=$2&uri=$3 [QSA,L]

--
W powyższej konfiguracji działa tylko pierwsza reguła, a kiedy ją zachaschuje działa druga sad.gif
Czy da sie to jakoś to przepisać, aby się nie gryzło ?
Pozdrawiam i z góry dzięki za podpowiedź lub wskazówkę wink.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
ShadowD
post
Post #2





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


A z której strony skrypt ma wiedzieć jakiej reguły ma użyć? Masz 2 reguły które mają takie same wymagania i kompilator nagle nie zacznie czytać Ci w myślach i robić tego co zechcesz...

Jeśli zaś chodzi Ci by kod nagle przekierował na raz na dwa adresy to też się nie da, nie ma opcji by podzielić użytkownika na pół. haha.gif

Rozwiązaniem jest rozróżnienie wyrażeń regularnych tak by jednoznacznie definiowały gdzie przekierować.

Ten post edytował ShadowD 4.08.2012, 09:10:51


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
radziu
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.03.2009

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


No to mi kolega pomógł.... :]
Jakoś tak słabo u mnie z rozróżnianiem wyrażeń regularnych, więc może w inny sposób podejdźmy do tego tematu.

W moim systemie, funkcja generująca url'a dla modułu 'static_pages' (dla reguły "/strona.php?m=pages&id=") wygląda tak:

func.php


  1.  
  2. $meta_title = htmlspecialchars(trim($_POST['meta_title']));
  3. $meta_desc = htmlspecialchars(trim($_POST['meta_desc']));
  4. $meta_keyw = htmlspecialchars(trim($_POST['meta_keyw']));
  5.  
  6. $znaki1 = array('ę','ó','ą','ś','ł','ż','ź','ć','ń','Ę','Ó','Ą','Ś','Ł','Ż','Ź','Ć','Ń');
  7. $znaki2 = array('e','o','a','s','l','z','z','c','n','e','o','a','s','l','z','z','c','n');
  8. $uri = strtolower ( str_replace ($znaki1, $znaki2, $meta_title) );
  9. $uri = preg_replace ('@[^a-z0-9]+@','-',$uri);
  10.  
  11. $r_uri = mysql_query("SELECT * FROM static_pages WHERE uri = '$uri' AND id<>'$id' LIMIT 1");
  12. if ( mysql_num_rows ( $r_uri ) ) {
  13. $i = 1;
  14. while ( mysql_num_rows ( $r_uri ) ) {
  15. $new_uri = $uri.$i++;
  16. $r_uri = mysql_query("SELECT * FROM static_pages WHERE uri = '$new_uri' AND id<>'$id' LIMIT 1");
  17. }
  18. $uri = $new_uri;
  19. }
  20.  


Natomiast w <head> pobieram sobie meta w taki sposób:

  1.  
  2. <?php
  3.  
  4. $static_title = ' - static title';
  5.  
  6. // tytuł, opis i słowa kluczowe dla innych podstron niż podstrona samochodu (auto.php?id=)
  7. $default_title = 'default tittle';
  8. $default_desc = ' default description';
  9. $default_keyw = 'default keywords';
  10.  
  11.  
  12.  
  13. if ( isset ( $_GET['uri'] ) ) {
  14. $uri = addslashes(strip_tags(trim($_GET['uri'])));
  15. $id = (int)$_GET['id'];
  16. myconnect();
  17. $r_meta = mysql_query ("SELECT id,meta_title,meta_desc,meta_keyw FROM static_pages WHERE (id='$id') ");
  18. $meta_tags = mysql_fetch_assoc ( $r_meta );
  19. myclose();
  20. $_GET['id'] = $meta_tags['id'];
  21.  
  22. $meta_keyw = $meta_tags['meta_keyw'];
  23. $meta_desc = $meta_tags['meta_desc'];
  24. $meta_title = $meta_tags['meta_title'].$static_title;
  25. }
  26. else {
  27. $meta_keyw = $default_keyw;
  28. $meta_desc = $default_desc;
  29. $meta_title = $default_title;
  30. }
  31.  
  32.  
  33. ?>
  34. <html>
  35. <head>
  36. <base href="/" />
  37. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  38. <title><?php print $meta_title; ?></title>
  39. <meta name="keywords" content="<?php print $meta_keyw; ?>" />
  40. <meta name="Description" content="<?php print $meta_desc; ?>" />
  41.  



I na koniec, w stopce wyświetlam kolumnę ze stronami statycznymi:

  1. <?php
  2. myconnect();
  3. $res = mysql_query("SELECT * FROM static_pages ORDER BY id ") or die('Zapytanie niepowiodlo sie: ' . mysql_error());
  4. $i=1;
  5. while ($static_pages = mysql_fetch_assoc($res)) {
  6. ?>
  7. <?php $link= 'informacje/'.$static_pages['id'].'/'.$static_pages['page_title'].'/'. $static_pages['uri'];?>
  8. <?php
  9. $link=str_replace(' ','-',$link);
  10. ?>
  11. <ul>
  12. <li><a href=" <?php echo $link; ?>.html "><?php echo $static_pages["page_title"]; ?></a></li>
  13. </ul>
  14. <?php
  15. $i++;
  16. }
  17. myclose();
  18. ?>
  19.  


No i dobrze, być może pojawia się tu problem w tym, że dokładnie te same funkcje próbują wygenerować ten sam efekt w stosunku do modułu 'cars' (/auto.php?id=).

func.php

  1.  
  2. myconnect();
  3.  
  4. /*
  5.   **
  6.   ** pobieranie meta-tagów i..
  7.   ** utworzenie na podstawie tytułu zmiennej $uri czyli "linku"
  8.   ** który będzie używany w "seo linkach" w .htaccess
  9.   ** następnie dodaję powyższe parametry ($meta_title, $meta_desc, $meta_keyw, $uri)
  10.   ** przy wywołaniu poniższej funkcji myedit_cars()
  11.   */
  12.  
  13. $meta_title = htmlspecialchars(trim($_POST['meta_title']));
  14. $meta_desc = htmlspecialchars(trim($_POST['meta_desc']));
  15. $meta_keyw = htmlspecialchars(trim($_POST['meta_keyw']));
  16.  
  17. $znaki1 = array('ę','ó','ą','ś','ł','ż','ź','ć','ń','Ę','Ó','Ą','Ś','Ł','Ż','Ź','Ć','Ń');
  18. $znaki2 = array('e','o','a','s','l','z','z','c','n','e','o','a','s','l','z','z','c','n');
  19. $uri = strtolower ( str_replace ($znaki1, $znaki2, $meta_title) );
  20. $uri = preg_replace ('@[^a-z0-9]+@','-',$uri);
  21.  
  22. $r_uri = mysql_query("SELECT * FROM cars WHERE uri = '$uri' AND id<>'$id' LIMIT 1");
  23. if ( mysql_num_rows ( $r_uri ) ) {
  24. $i = 1;
  25. while ( mysql_num_rows ( $r_uri ) ) {
  26. $new_uri = $uri.$i++;
  27. $r_uri = mysql_query("SELECT * FROM cars WHERE uri = '$new_uri' AND id<>'$id' LIMIT 1");
  28. }
  29. $uri = $new_uri;
  30. }


head.php

  1.  
  2. <?php
  3. include("inc/func.php");
  4. ?>
  5. <!DOCTYPE HTML>
  6. <?php
  7. /*
  8.   **
  9.   ** tworzę zmienną $static_title i używam jej w meta-tagu title
  10.   **
  11.   */
  12.  
  13.  
  14.  
  15.  
  16.  
  17. // dopisek do tytułu na podstronach samochodu
  18. $static_title = ' - static tittle';
  19.  
  20. // tytuł, opis i słowa kluczowe dla innych podstron niż podstrona samochodu
  21. $default_title = 'default tittle';
  22. $default_desc = 'default description';
  23. $default_keyw = 'default keywords';
  24.  
  25.  
  26.  
  27. if ( isset ( $_GET['uri'] ) ) {
  28. $uri = addslashes(strip_tags(trim($_GET['uri'])));
  29. $id = (int)$_GET['id'];
  30. myconnect();
  31. $r_meta = mysql_query ("SELECT id,meta_title,meta_desc,meta_keyw FROM cars WHERE (id='$id') ");
  32. $meta_tags = mysql_fetch_assoc ( $r_meta );
  33. myclose();
  34. $_GET['id'] = $meta_tags['id'];
  35.  
  36. $meta_keyw = $meta_tags['meta_keyw'];
  37. $meta_desc = $meta_tags['meta_desc'];
  38. $meta_title = $meta_tags['meta_title'].$static_title;
  39. }
  40. else {
  41. $meta_keyw = $default_keyw;
  42. $meta_desc = $default_desc;
  43. $meta_title = $default_title;
  44. }
  45.  
  46. ?>
  47. <html>
  48. <head>
  49. <base href="/" />
  50. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  51. <title><?php print $meta_title; ?></title>
  52. <meta name="keywords" content="<?php print $meta_keyw; ?>" />
  53. <meta name="Description" content="<?php print $meta_desc; ?>" />





Poległem, bo nie bardzo wiem jak połączyć te 2 wątki, tak aby nie kolidowały ze sobą..
Pomoże któryś z bardziej doświadczonych kolegów ?

...i brak odzewu :]

Ten post edytował radziu 4.08.2012, 12:57:19
Go to the top of the page
+Quote Post
ShadowD
post
Post #4





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Nie możesz napisać co chcesz uzyskać i jakie już linki masz? Na prawdę nie chcę mi się tego przeglądać i jeśli liczysz na pomoc to chociaż zawalcz trochę a nie czekasz na gotowca! Nie mam też pojęcia co jeden problem ma z drugim i o co tak na prawdę Ci chodzi...


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
kiler129
post
Post #5





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


http://rtfm.killfile.pl/#cel


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
irmidjusz
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


Radziu, najwyraźniej nie zrozumiałeś, co Ci ShadowD napisał.

Cytat(radziu @ 4.08.2012, 02:55:16 ) *
RewriteRule ^(.*)/([0-9]+)/(.*)\.html$ /auto.php?id=$2&uri=$3 [QSA,L]
RewriteRule ^(.*)/([0-9]+)/(.*)\.html$ /strona.php?id=$2&uri=$3 [QSA,L]


Problem w tym, że obie reguły rozpoznające wzorzec są identyczne (^(.*)/([0-9]+)/(.*)\.html$), czyli niczym się nie różnią, czyli pasują do tych samych danych, czyli zostanie dopasowana reguła pierwsza napotkana z tych dwóch, a druga nigdy. To oznacza, że masz spartolone reguły routingu i nikt Ci nic nie poradzi, tylko sam możesz sobie poradzić, zmieniając generowane linki tak, aby się od siebie różniły tak, aby można było jedną z powyższych reguł zmienić tak, aby jednoznacznie odróżniała się od drugiej (i wszystkich pozostałych, czyli żeby była unikatowa) smile.gif


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
radziu
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.03.2009

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


Dzięki kolegom za zainteresowanie tematem.
Jak widzicie, moja wiedza na temat php dość mocno kuleje :]

Spróbuję przepisać i zmienić funkcję generującą linki do static_pages i zmienię regułę RewriteRule ^(.*)/([0-9]+)/(.*)\.html$ /strona.php?id=$2&uri=$3 [QSA,L].
Jeśli nadal nie będę mógł sobie z tym poradzić to poproszę o pomoc, albo się poddam wink.gif

Dzięki za wskazówki wink.gif
R.
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: 21.08.2025 - 17:40