Witam wszystkich zainteresowanych,
problem, który tu spróbuje przedstawić będzie benefitował w SEO ale jak również przejrzystości serwisu oraz tworzeniu jego mapy.
Moim celem jest wypracowanie zestawu reguł rewrite dla apacha (możliwie również dla ISS ale nie jest to moim zamierzeniem docelowym) będącymi uniwersalnymi dla całego serwisu niezależnie od ilości zmiennych do przesłąnia poprzez nazwę pliku.
Ogólna postać nazw i katalogów:
1. nazwastrony_zmienna-wartosczmiennej.html
przy czym część: 'zmienna-wartosczmiennej' może powtarzać się n-krotnie a separatorem zmiennych byłby znak '_' (podkreślenie). 'nazwastrony' może być to nazwa pliku *.php lub wartość jakiejś zmiennej określającej stronę (na razie nie ma to większego znaczenia)
2. /nazwastrony/nazwazmiennej/wartosczmiennej/nazwapodstrony.html [lub index.html gdy brak lub domyślne]
przy czym 'nazwapodstrony' może mieć dodatkowo postać z podpkt. 1. (tak dla uogólnienia, mimo to że może w tym wypadku powstać dublowanie zmiennych)
tak jak i w podpunkcie 1. taki i tutaj część: 'nazwazmiennej/wartosczmiennej/' powtarzać się może n-krotnie
Rozwiązanie:
Jest o tyle trudne, że nie udało mi się w internecie ani w dokumentacji znaleść informacji na temat możliwości rekurencji pewnych części nazwy pliku, mianowicie nie wiem czy można stosować coś w rodzaju: (([a-zA-Z0-9]+)-([a-zA-Z0-9]*))*jako regułę rewrite gdyż problemem staje się odwołanie do kolejnych elementów. Trzeba również wziąść poprawkę na nazwy o wartości zmiennych, które nie mogą zawierać znaków: '-' oraz '_' lub trzeba zmodyfikować odpowiednio reguły: '[a-zA-Z0-9]' aby dopuszczały taką możliwość. Jako możliwe rozszerzenia plików dopuszczamy: *.htm, *.html, *.asp (opcjonalnie). Niezależnie od wybranego rozszerzenia serwowana jest ta sama strona. Trzeba również dodać odpowiednie reguły RewriteCond, które sprawdzały by czy rządany plik istnieje na serwerze, bo jeśli tak to reguły rewrite musiałby by zostać pominięte aby nie uniemożliwić dostępu do pliku/folderu.
Pierwszy rzut na taśmę, reguły poprawne lecz nie zawierające wszystkiego ww.
metoda łapotologiczno-piechotna:
1.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)_(.+)-(.+)_(.+)-(.+)\.(html|htm|asp)$ index.php?p=$1&$2=$3&$4=$5 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)_(.+)-(.+)\.(html|htm|asp)$ index.php?p=$1&$2=$3 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.(html|htm|asp)$ index.php?p=$1 [L,QSA]
no i bez rekurencji można pisać te regułki bez końca... tu tkwi główny problem, czekam na propozycje...
2. na razie pomijam, dopuki nie wskóramy czegoś sensownego dla pkt 1.
Oczywiście na końcu należy dodać flagę [QSA] aby przekazać inne zmienne przesłane standardowo.
Flaga: [L] ma zakończyć rewriting (pominąć następne reguły) czy tutaj zadziała prawidłowo oraz czy nie będzie się gryźć z RewriteCond?
Czy niezbędnym jest pisanie RewriteCond przed kazdą RewriteRule czy można to jakoś obejść?
Czekam na sensowne propozycje i dyskusje na poziomie,
pozdrawiam