Geston
9.04.2014, 11:49:06
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
9.04.2014, 19:24:56
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
14.04.2014, 16:20:15
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...