Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: htaccess problem
Forum PHP.pl > Forum > Serwery WWW > Apache
Geston
Mam oto taki pliczek htaccess

Kod
RewriteEngine on
Options -Indexes
DirectoryIndex index.php meintance.php
RewriteBase /public/
RewriteRule ^([a-z]+)/([0-9]+)/?$ $1.php?id=$2 [L]
RewriteRule ^([a-z]+)/?$ $1.php [L]
RewriteRule ^$ index.php [L]


Wszystko działa poprawnie z jednym wyjątkiem. Mam wrażenie że serwer jako taki bazowy adres przechwytuje nie katalog z ustawień serwera w którym się strona znajduje a następnie katalog "public" jak to zostało ujęte w htacces i następnie kolejne argumenty i to przepisuje, ale bazą dla serwera jest adres do ostatniego slasha z poprzedniego odwołania. Nie potrafię sobie z tym poradzić. Dla przykładu.

Mamy odnośnik na stronie href="test". Oglądając dowolną stronę, przykładowo localhost/dowolna, po kliknięciu w link jesteśmy odpowiednio przekierowywani. Jeżeli jednak oglądam stronę localhost/dowolna/123 po kliknięciu w ten sam link zostaję przekierowany do localhost/dowolna/test zamiast tak jak było to w przykładzie pierwszym.
Turson
Jeżeli dopisuje ci adres strony z linku do aktualnej strony to wina samego linku.
Jesteś na localhost/lorem/ipsum a chcesz wejśc na localhost/aaa to link href=/aaa
Geston
Obawiam się że problem jest jednak jakiś inny dziwny.
Mając kilka linków o identycznej konstrukcji:
href="index"
href="rules"
href="register"
href="login"
Czyli semantycznie nie różnią się zupełnie niczym, klikając na nie przenosi mnie do odpowiednich stron i wszystko jest ok, w pasku adresu widzę kolejno:
localhost/index
localhost/rules
localhost/login
ale...
localhost/register/
Tego nie rozumiem że tylko dla tego jednego linku dodaje ukośnik na końcu. Jedyna różnica to długość stringów, możliwe że serwer oprócz nawet pełnego linku localhost//public/register.php widzi coś więcej z przodu i przez długość linku jest problem?

Przewaliłem teraz .htaccess do katalogu public i ustawiłem directory root na ten sam katalog, oczywiście w .htaccess też RewriteBase zmieniłem na sam / (slash). Po tej akcji nie dodaje mi już do żadnego z linków z menu slasha na końcu, wszystko działa super do momentu aż odwołuje się do strony z dodatkowym parametrem jak np localhost/event/4. Not found... Gdzie link powinien być zamieniony na event.php?id=4. Owy plik istnieje a mimo to...

Możliwe są jakieś krzywe jazdy w konfiguracji serwera?

1. localhost/event działa
2. localhost/event/ też działa
3. localhost/event/4 już nie działa...
4. localhost/event/4/ działa...

Skoro opcja 1 działa bez slasha na końcu to czemu nie działa opcja 3 bez slasha :/

No i dalej do póki biegam po głównych podstronach bez parametrów wszystko gra, w momencie gdy po jakimś linku pojawi sięslash
localhost/event/
to po wybraniu opcji href="login", która bez slasha była interpretowana jak localhost/login, to w tym przypadku dostaje localhost/event/login, tak jakby base url to już nie był localhost... tylko localhost/event/...

Jeżeli mogę prosić żeby ktoś rzucił jeszcze okiem to byłbym wdzięczny, już tydzień przeszukiwania różnych for, artykułów i nic, jakby to był jakiś wyjątkowy problem.
Może szukam nie tam gdzie powinienem, dodam każde informacje których może brakować.

W skrócie jeszcze raz, wygląda to tak, jakby RewriteBase nie dopisywało do localhosta tego co jest w nim zdefiniowane, czyli jak mam "RewriteBase /strona/" to po kliknięciu w link nie otrzymuję zawsze localhost/strona/example, tylko w momencie gdy pojawiły się w url dodatkowe parametry, jak localhost/strona/example/82, to wygląda to tak jakby RewriteBase zostało nadpisane (?!) na "RewriteBase /strona/example/"... Czyli od momentu wywołania dowolnego adresu gdzie pojawia się trzeci slash po localhost...

Rozkładam ręce...
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.