Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mod rewrite] Nie działa rozszerzenie *.html
Forum PHP.pl > Forum > Przedszkole
Blajo
Mam taki plik *.htaccess

Options +FollowSymLinks
RewriteEngine on


RewriteRule (.*)-(.*)\.html index.php?p=$1&idd=$2 [L]
RewriteRule dowcipy-(.*)-(.*)-(.*)\.htm$ /index.php?p=$1&kid=$2&k=$3

W pierwszym przypadku - działa z roszerzenie *.html - w drugim jak dam *.html - wszystko się wysypuje, działa tylko z *.htm

dlaczego i jak to naprawić?
qrees
$ oznacza koniec wiersza, więc skoro po htm masz $ to nie ma szans działać z html.
phpion
Jest dokładnie tak jak pisze ~qrees. Aby obsłużyć *.htm oraz *html musisz swoją regułkę zapisać tak:
Kod
RewriteRule dowcipy-(.*)-(.*)-(.*)\.html?$ /index.php?p=$1&kid=$2&k=$3

Dodanie l? oznacza, że l (małe L) jest znakiem opcjonalnym - czyli może być htm lub html.
Blajo
Regułka:
RewriteRule (.*)-(.*)-(.*)\.html? index.php?p=$1&kid=$2&k=$3

Adres http://www.dowcipy.iseasy.pl/kategoria-2-agronom.htm - działa
Adres http://www.dowcipy.iseasy.pl/kategoria-2-agronom.html - nie działa

Więc nie w tym był problem
phpion
Cytat(Blajo @ 13.03.2008, 10:29:59 ) *
Regułka:
RewriteRule (.*)-(.*)-(.*)\.html? index.php?p=$1&kid=$2&k=$3

Adres http://www.dowcipy.iseasy.pl/kategoria-2-agronom.htm - działa
Adres http://www.dowcipy.iseasy.pl/kategoria-2-agronom.html - nie działa

Tak się dziwnie składa, że ta regułka przepuszcza oba te adresy. Sprawdziłem u siebie.

Cytat(Blajo @ 13.03.2008, 10:29:59 ) *
Więc nie w tym był problem

"był"? Czyli problem rozwiązałeś? Jeśli tak to może zostawiłbyś info nt. rozwiązania dla potomnych... aczkolwiek pewnie machnąłeś się gdzie indziej bo powyższe regułki działają poprawnie...
Blajo
Moja literówka. Problemu nie rozwiązałem.
Proszę sobie wejść na oba adres - tam wszystko widać czy działa, czy nie.
phpion
Więc problemem nie są regułki tylko skrypt. Wyświetl sobie tablicę $_GET jaka jest dostarczana do skryptu.
mokry
Zobacz to:
Kod
Options FollowSymLinks
RewriteEngine On

RewriteRule dowcipy-(.*.)-(.*.)-(.*.).html?$ index.php?p=$1&kid=$2&k=$3
Blajo
to samo...
*.htm działa *.html nie działa.
Nie sądzę, żeby to był problem skryptu, ale jakby coś to oto skrypt, który to pobiera.

  1. <?php
  2. $p = ( isset($HTTP_GET_VARS['p']) && !empty($HTTP_GET_VARS['p']) ) ? $HTTP_GET_VARS['p'] : 'index';
  3. if( file_exists('linki/' . $p . '.php') )
  4. {{include('linki/' . $p . '.php');}}
  5. else { echo "Strona tymczasowo niedostępna! Za utrudnienia Przepraszamy!"; }
  6. ?>
mokry
Zobacz może, czy problem występuje również u Ciebie na localhoscie. Jeśli nie, skontaktuj się ze swoim administratorem serwera.
Blajo
Na localhoscie w ogóle nie mam opcji mod-rewrite, więc nie sprawdze winksmiley.jpg

Np. MyGAD 2.0 działa bez problemu, tylko z tą jedną tutaj literką jest problem...

Na pewno problem jest po stronie skryptu.
Sprawdziłem na innym serwerze i taki sam błąd występuje.
Więc może ktoś wie o co chodzi?
phpion
Cytat(Blajo @ 13.03.2008, 15:05:27 ) *
Nie sądzę, żeby to był problem skryptu

Cytat(Blajo @ 14.03.2008, 12:59:03 ) *
Na pewno problem jest po stronie skryptu.

Hehehe, miękniesz haha.gif

Sprawdź co otrzymujesz w tablicy $_GET dla htm oraz html:

  1. <?php
  2. print_r($_GET);
  3.  
  4. $p = ( isset($HTTP_GET_VARS['p']) && !empty($HTTP_GET_VARS['p']) ) ? $HTTP_GET_VARS['p'] : 'index';
  5. if( file_exists('linki/' . $p . '.php') )
  6. {{include('linki/' . $p . '.php');}}
  7. else { echo "Strona tymczasowo niedostępna! Za utrudnienia Przepraszamy!"; }
  8. ?>
Blajo
miękne miękne tongue.gif

fla *.htm otrzymuję to co jest w $p, czyli:
kategoria

a dla *.html:
kategoria-2-agronom

dla mnie co najmniej dziwne.

Więc może zadam inne pytanie. Jak dołączać dynamicznie pliki w index.php z jakiegoś podfolderu, żeby to wszystko ładnie działało?



Hmm w zasadzie sobie poradziłem - wszystko mi działa, ale dziwnie, dlatego mam pytanie.

Tak wygląda mój plik *.htaccess

Options +FollowSymLinks
RewriteEngine on

RewriteRule index.html? index.php
RewriteRule (.*)-(.*)\.html? index.php?p=$1&idd=$2
RewriteRule (.*),(.*),(.*)\.html? index.php?p=$1&kid=$2&k=$3
RewriteRule (.*)_(.*)_(.*)_(.*)\.html? index.php?p=$1&kid=$2&k=$3&start=$4

Jak widać - raz myślniki, potem przecinki i na koniec podkreślenia.
Jak dam wszędzie myślniki, przecinki, lub podkreślenia, to tylko to pierwsze działa.

Dlaczego? Jak temu zapobiec?


Co zrobić, żeby używanie jednego znacznika działało?
siemakuba
Co dokładnie chcesz osiągnąć?
Sprawdziłem te twoje regułki, i działa to wydaje się tak jak powinno.

W czym jeszcze leży problem? Napisz jakie URLe mają działać, może będzie prościej.

pozdr.
Maciekbjw
http://www.php.rk.edu.pl/w/p/modrewrite-krotkie-urle/

To powinno Ci pomóc.
Blajo
Cytat(siemakuba @ 16.03.2008, 13:14:52 ) *
W czym jeszcze leży problem? Napisz jakie URLe mają działać, może będzie prościej.


Chciałbym mieć takie URLe, że w każdym "odstępy" zastępuje "-" (myślnikiem).
Jednak jak tak napisze w *.htaccess - działa tylko jedna taka regułka. Dlatego mam pierwszą regułkę z myślnikiem, drugą z przecinkiem, trzecią z podkreślnikiem.

Może błąd jest w kawałku kodu odpowiedzialnego za dołączanie plików, który zapodałem wyżej?
Kicok
Sposób pierwszy: zamiast . daj [^-]


Sposób drugi: pisz te regułki od tyłu:
Kod
(.*)-(.*)-(.*)-(.*)\.html?
(.*)-(.*)-(.*)\.html?
(.*)-(.*)\.html?

i dodawaj do każdej flagę [L]


Więcej znajdziesz TUTAJ
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.