Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]mod_rewrite automatyczne tworzenie nowych reguł
Forum PHP.pl > Forum > PHP
Lejto
Czy można napisać jakiś kontroler który by w pliku .htaccess dodawał automatycznie reguły dla nowych podstron, a nie trzeba by było ręcznie każdej nowej strony osobno dodawać?


Pozdrawiam
wookieb
Można ale, ja osobiscie uwazam ze lepsze jest zrobienie takiej reguly ktora wszystko (oprocz odwolan do plikow o dozwolonych rozszerzeniach) bedzie przekierowwac do jednego pliku, który zajmie się obsługą URL.
Lejto
no to mod_rewrite nie będzie tu konieczne?
wookieb
Bedzie do zrobienia wlasnie tej regulki przekierowujacej.
Lejto
hmm a jakaś pomoc? bo nie za bardzo rozumiem
bim2
Tak jak teraz przekeirowujesz cokolwiek, powiedzmy artykuły
article,([0-9]+).html article.php?id=$1

To zrob żeby wszysctko przekierowywało na index.php który odbierze adres, przekonweruje i ustawi odpowiednie zmienne.

Zobacz też moją klasą odpowiedzialną za ta obsługę:
http://hernas.pl/download/entry-b9e3dca913...0719b6ae3a2.htm
wookieb
Kod
RewriteRule !\.(gif|jpe?g|png|css|js|swf|ico|html?)$ index.php
Pilsener
To może ja wyjaśnię - robienie reguł jest ZŁE, bo:
- nieelastyczne (zmiana struktury serwisu, zmiana serwera pociąga za sobą konieczność zmiany reguł), użytkownik powinien móc dowolnie tworzyć kategorie, podkategorie, dodawać strony, instalować moduły bez konieczności dłubania w .htaccess
- obciąża serwer - jak widzę np. 400 reguł opartych o wyrażenia regularne to mnie szlag trafia

Robisz tak, żeby KAŻDY adres typu:
strona.pl/filmy/filmy_przygodowe/filmy,przygodowe-2.html

Był przepisywany na coś takiego:
strona.pl/index.php?page=/filmy/filmy_przygodowe/filmy,przygodowe-2.html

Po prostu wszystko co jest po strona.pl trafia do jednej zmiennej i tyle.

Niezależnie od wpisanego adresu wszystko trafia do zmiennej $_GET['page'] i pliku index.php, gdzie przy pomocy PHP to obrabiasz (najlepiej użyć klasy/funkcji, która parsuje adres i zwraca gotową tablicę parametrów, na początku index.php includujesz taką klasę/funkcję i tyle).
Lejto
ok ale jak funkcje napisać typu takiego co podał bim2 w swoim linku?
mój .htaccess obecnie wygląda tak:
Kod
RewriteEngine On
RewriteRule ^index/$ index.php
RewriteRule ^oferta/$ index.php?page=oferta
RewriteRule ^kontakt/$ index.php?page=kontakt
RewriteRule ^wiadomosci/$ index.php?page=wiadomosci
RewriteRule ^mail/$ index.php?page=mail
RewriteRule ^foto/$ index.php?page=galeria
RewriteRule ^foto/[0-9]/$ index.php?page=galeria&id=$1
RewriteRule ^mail,send/$ index.php?page=mail_send


i switch
  1. <?php
  2. public function select_page_nag($page)
  3.    {
  4.            
  5.        switch($page)
  6.        {
  7.            case '':
  8.            $this->glowna_txt();
  9.            break;
  10.            case 'oferta':
  11.            $this->glowna_txt();
  12.            break;
  13.            case 'kontakt':
  14.            $this->glowna_txt();
  15.            break;
  16.            case 'wiadomosci':
  17.            include("news.php");
  18.            break;
  19.            case 'mail':
  20.            include_once("mail.php");
  21.            break;
  22.            case 'mail_send';
  23.            include("mail.php");
  24.            break;        
  25.            case 'galeria';
  26.            include("galeria.php");
  27.            break;
  28.            case (int)
  29.            include("galeria.php");
  30.            break;
  31.            
  32.        }
  33.        
  34.        return $page;
  35.    }
  36. ?>

i nagłówiki
  1. <?php
  2. if($page == '')
  3.    {      
  4.      $result = $this->set_query('SELECT naglowek from pages where id_strony = 0');    
  5.      echo  $result;
  6.    }
  7.    elseif($page == 'oferta')
  8.    {
  9.      $result = $this->set_query('SELECT naglowek from pages where id_strony = 2');    
  10.      echo  $result;    
  11.    }
  12.    elseif($page == 'kontakt')
  13.    {
  14.      $result = $this->set_query('SELECT naglowek from pages where id_strony = 3');    
  15.      echo  $result;    
  16.    }
  17. ..//[..]..
  18. ?>
bim2
zacznijmy od tego żebyś zaczął używać $_GET i $_POST smile.gif

Później wystarczy że weźmiesz moją klasę i dasz
  1. <?php
  2. $aRouting['default'] = array('foto/[id]/', 'page=foto&id=id');
  3. $aRouting['default'] = array('[page]/[params]', 'page=[page]', 'params' => '(.*)',
  4.                                                                 '_params' => array('[name]/[value]/', '[name]=[value]'));
  5. ?>

I wtedy normalnie robisz
http://costam.pl/Oferta/id/12/ lub http://costam.pl/Oferta/
lub http://costam/foto/12/ smile.gif
Lejto
Cytat
zacznijmy od tego żebyś zaczął używać $_GET i $_POST smile.gif

przecież mam $page w get
bim2
Zamiast
  1. <?php
  2. switch($page)
  3. ?>

daj
  1. <?php
  2. switch($_GET['page'])
  3. ?>
Lejto
a po co tongue.gif
jak mam w index.php $page = $_GET['page'];
bim2
No nie, no to mów na poczatku smile.gif Tylko po co tak przepisywac zmienne? Nie lepiej korzystać z GET? smile.gif Zresztą nieważne, już odpowiedziałem na twoje pytanie odnosnie htaccess
Lejto
nie nie winksmiley.jpg to powiedz co robię jeszcze źle, żeby to miało lepszą funkcjonalność
bim2
Nic, w ogóle mi się koncepcja nie podoba. Za dużo pracuję na swoim FW i się przyzwyczaić nie mogę smile.gif Powiedz czy udało ci się pomęczyc z moim routerem, bo nie testowałem na innych zew. aplikacjach, robiłem to pod FW :]
okitoki
zobacz tutaj w jednej z odpowiedzi dodałem troszkę inne rozwiązanie na mod_rewrite
Lejto
ok dzięki, patrzałem już wcześniej winksmiley.jpg
pobawię się z tym
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.