Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: .htaccess - pusty GET, zamiast przenosić - odświeża.
Forum PHP.pl > Forum > Serwery WWW > Apache
Wishermil1
Witam!

Mam pewien problem nad którego rozwiązaniem pracuje już dobry tydzień.
Wykupiłem hosting na 1and1 i mam kłopot z przyjaznymi linkami.

To zawartość mojego .htaccess:


  1. <IfModule mod_rewrite.c>
  2. RewriteEngine on
  3. RewriteBase /
  4. RewriteRule ^random/$ /random.php
  5. RewriteRule ^add/$ /add.php
  6. RewriteRule ^waiting/$ /waiting.php
  7. RewriteRule ^login/$ /login.php
  8. RewriteRule ^register/$ /register.php
  9. RewriteRule ^contact/$ /contact.php
  10. RewriteRule ^inbox/$ /inbox.php
  11. RewriteRule ^search/$ /search.php
  12. RewriteRule ^rules/$ /rules.php
  13. RewriteRule ^profile/$ /profile.php
  14. RewriteRule ^favorites/$ /favorites.php
  15. RewriteRule ^img/(.*)/(.*)/$ /img.php?id=$1 [L]
  16. RewriteRule ^category/(.*)/(.*)/([0-9]+)/$ /categories.php?id=$1&title=$2&page=$3 [L]
  17. RewriteRule ^category/(.*)/(.*)/$ /categories.php?id=$1&title=$2 [L]
  18. RewriteRule ^user/(.*)/(.*)/$ /user.php?id=$1 [L]
  19.  
  20. RewriteCond %{REQUEST_FILENAME} !-f
  21. RewriteCond %{REQUEST_FILENAME} !-d
  22. RewriteRule . /index.php [L]
  23. </IfModule>


Problem pojawia się tylko i wyłącznie w tym:

RewriteRule ^img/(.*)/(.*)/$ /img.php?id=$1 [L]

Link generuje się prawidłowo na stronie - jak w niego klikam, to nie wysyła go do paska adresu, a przeładowuje stronę.
Tak jakbym ciągle odświeżał, to samo dzieje się jak skopiuje link i wrzuce w pasek adresu. Wyrzuca mi stronę główną.

oraz w tym:

RewriteRule ^user/(.*)/(.*)/$ /user.php?id=$1 [L]

tutaj problem polega na tym, że wpisuje adres, ale samoczynnie dodaje na końcu "index.php". Więc link wygląda tak:

/user/2/wishermil/index.php

Do tego wyrzuca komunikat, że "strona zawiera pętlę przekierowań".


Konsultowałem się z supportem 1and1, otrzymałem taką odpowiedź:

Cytat
Każdy serwer apache posiada inną odpowiednią konfigurację, indywidualną dla danego usługodawcy. Specyfikacja techniczna naszej konfiguracji:

http://httpd.apache.org/docs/2.2/de/howto/htaccess.html
http://faq.1and1.pl/help/d579129.html


Z góry dziękuje za wsparcie, bo już nie wiem gdzie szukać rozwiązania.
Matimor
Zacznij od wyrzucenia tego kawałka kodu:
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


Następnie dodaj po "RewriteBase / " kod:
Kod
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{REQUEST_URI} !^/index.php [NC]
RewriteRule ^$ /index.php    [R=301,L]


Muszę czepić się jednej rzeczy, która jest nagminnie stosowana przez początkujących. W kodzie masz coś takiego:
Kod
RewriteRule ^user/(.*)/(.*)/$ /user.php?id=$1 [L]


Pamiętaj o tym, aby tworzyć bardziej "wymagające" wyrażenie tzn. ściśle kontroluj przesyłane dane. Nawiązując do powyższego przykładu możesz zrobić coś takiego:
Kod
RewriteRule ^user/([0-9]+)/([A-Za-z0-9\-)/$ /user.php?id=$1 [L]


Takie rozwiązania w znacznym stopniu ułatwiają namierzanie ewentualnych problemów w plikach htaccess i w niewielkim stopniu wprowadzają małe "zabezpieczenie".
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.