ďťż

[php, mod rewrite] Czyli ustalenie reguły wykonywania reguły dla żądań NIe zawierajacych .'js'

       

Podstrony


telcocafe

Jak w temacie. Znalazłem na necie tutoriale wyrażeń regularnych, manuale dotyczące tworzenia .htacess ale nie udało mi się osiągnąć ani raz choćby czegoś zbliżonego do oczekiwanego efektu, więc z nadzieją zwracam się do Was. Chcę aby reguła nie działała, gdy w żądaniu będzie ścieżka do pliku .js (bez względu na to, czy będzie ona prawidłowa czy nie). Mój .htacess:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d rewriteRule ^(.*)$ index.php?m=$1 [L,QSA]



RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) index.php?m=$1 [L,QSA]

Hmmm, czy mógłbyś mi opisać co wnosi ta modyfikacji tej linijki? :)
Edit: niestety, po tej zmianie jest dalej tak samo jak było.
Użytkownik Isaac from Vale edytował ten post 14 lipiec 2010, 14:00
Spróbuj dodać RewriteBase. Być może musisz ustawić inną ścieżkę.RewriteEngine On RewriteBase /A dalej jak w poprzednim przykładzie. Jeżeli nie działa, zresetuj serwer.
Użytkownik Ferrari edytował ten post 14 lipiec 2010, 14:59


Teraz w ogóle nie działa, bo przekierowuje mnie do poprzedniego folderu, tzn głównego, bo .htacess i strona z której korzystam jest w podfolderze htdocs. Ja myślałem, żeby zrobić jakis warunek, że w QUERY_STRING nie może być .js na samym końcu stringa, ale nie umiem tego zapisać w .htacess.

Akurat obydwa przykłady powinny działać, więc wina leży po stronie serwera, na którym uruchamiasz skrypt. Jaki to serwer?

Spróbuj jeszcze takiego przykładu:Options +FollowSymLinks RewriteEngine On RewriteBase /htdocs/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .+ index.php?m=$0 [L,QSA]
Użytkownik andrzej_aa edytował ten post 14 lipiec 2010, 15:10
U mnie dalej to samo. Korzystam z Apache.

@adrzej_aa Twój kod wywala błąd serwera : )
Użytkownik Isaac from Vale edytował ten post 14 lipiec 2010, 15:13
No okej, ale jaka wersja? Jakiś pakiet? Jaki system?

Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
Co do systemu to uściślę, że Win 7 ;)

Domyślam się, że to XAMPP, bo masz starszą wersję Apache. Nie wiem co może być nie tak, ale możesz użyć również takiego przykładu: Options +FollowSymLinks RewriteEngine On RewriteBase /htdocs/ RewriteRule .+\.(js|css|jpg|png|gif) $0 [L,QSA] RewriteRule .* index.php?m=$0 [L,QSA]

Niestety:

Nie znaleziono obiektu!

Nie znaleziono żądanego URLa na tym serwerze. Jeśli wpisałeś URLa ręcznie, sprawdź, czy nie się nie pomyliłeś.

Jeśli myślisz, że jest to błąd tego serwera, skontaktuj się z administratorem.
Error 404


Napisałeś, że masz to w katalogu htdocs. To popraw kod bez bazy przepisywania i powinno działać.

Stronę mam w folderze htdocs/OO, i w folderze OO znajduje się .htacess. Poza tym usunąłem tą linijkę oraz zamieniłem htdocs na OO w niej i nie działa wciąż, pojawia się błąd serwera.
Użytkownik Isaac from Vale edytował ten post 14 lipiec 2010, 15:36
Więc popraw na taki (lub bez bazy):Options +FollowSymLinks RewriteEngine On RewriteBase /OO/ RewriteRule .+\.(js|css|jpg|png|gif) $0 [L,QSA] RewriteRule .* index.php?m=$0 [L,QSA]

// Edytowano
Skoro pojawia się błąd serwera, to może być problem z opcją FollowSymLinks. Usuń tę linię i sprawdź, czy działa.
Użytkownik andrzej_aa edytował ten post 14 lipiec 2010, 15:38
Wciąż to samo, nawet gdy usunę tą linijkę, tym razem pojawia się Internal Server Error.

Mam dość. Siódemka jest beznadziejna do uruchamiania serwera. Albo masz słabo go skonfigurowanego. Spróbuj tak, a jeśli wciąż nie działa, to ja się poddaję:Options +FollowSymLinks RewriteEngine On RewriteRule (.+\.(js|css|jpg|png|gif)) $1 [L,QSA] RewriteRule (.*) index.php?m=$1 [L,QSA]
Albo tak:Options +FollowSymLinks RewriteEngine On RewriteRule (.+\.(js|css|jpg|png|gif)) $1 [L] RewriteRule .* index.php [L]Ale w tym przykładzie już musisz odczytać wartość z $_SERVER['REQUEST_URI'].

Dzięki za próby i starania się, może mnie to naprowadzi na coś, ale niestety, Twoje propozycje zawiodły :(

EDIT: Udało mi się ;)
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !/(js)/ RewriteRule ^(.*)$ index.php?m=$1 [L,QSA]

starczyło dodać tą linijkę: RewriteCond %{REQUEST_URI} !/(js)/
Użytkownik Isaac from Vale edytował ten post 14 lipiec 2010, 17:15

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Te linijki powinny wszystko poprawić. Przekopiuj fragmenty plików konfiguracyjnych Apache odpowiedzialnych za typy MIME. Być może nie rozpoznaje istniejących plików albo rzeczywiście jest potrzebny RewriteBase.

Też mam XAMPP i nie ma żadnych problemów z mod_rewrite.
Użytkownik Ferrari edytował ten post 14 lipiec 2010, 17:49
Ferrari, mój problem polegał na tym, że mam w html tagi <script></script> i jak jest w nich link do js w stylu: "javascript/script.js" to sesja się wysypuje, bo chociaż ścieżka jest niepoprawna, to interpretuje to jako GETa, jak dodam slasha przed nazwę folderu lub dam pełną ścieżkę do pliku zaczynającą sie od http://... to wszystko gra. Jeśli chodzi o xamppa to myślę, że wszystko z nim ok, bo nie wprowadzałem jakichś większych lub dziwnych zmian do konfiguracji apacha itd, a mod_rewrite w ogóle nie ruszałem.
Poprawne ścieżki do plików i folderów normalnie działają.
Użytkownik Isaac from Vale edytował ten post 14 lipiec 2010, 21:44
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.