Mam problem z przestrzeganiem reguł przez CUrlManager. Mianowicie jak ustawiam parametr urlFormat na path to reguły są przestrzegane. Reguły przestają działać jak zmieniam urlFormat na get i przypisuję useStrictParsing true. urlFormat w mojej aplikacji musi być ustawiony na get, ponieważ obrazki mają ścieżkę względną. Jak można zmusić urlManager do przestrzegania reguł przy urlFormat=‘get’? Poniżej część kodu z pliku do konfiguracji:
Parametr useStrictParsing=true nie będzie działał w połączeniu z formatem url ustawionym na ‘get’ (jest o tym w dokunentacji api). Ogólnie to nie za bardzo rozumiem czemu chcesz korzystać z formatu ‘get’ i w czym to przeszkadza w kwestii względnych ścieżek do obrazków.
Nie mogę ustawić w urlFormat na path ponieważ to wygeneruje link typu "mojastrona.pl/index.php/contraller/akcja/" i przeglądarka będzie odwoływać się do nieistniejących folderów, gdyż ścieżki w obrazkach są względne.Zmiana ścieżek względnych na bezwzględne nie wchodzi w grę, ponieważ jest za dużo kodu do zmiany. Chciałbym w części serwisu zrobić ładne linki, jednocześnie zostawiając resztę, która musi działać pod tradycyjnym formatem adresu URL.
Chyba wiem o co Ci chodzi. Musisz z reguł usunąć ‘http://vip.zegar.ksu.pl’. Oba formaty ‘get’ i ‘path’ działają na względnej części adresu url. Nie wiem po co chcesz używać reguł z adresem domeny (chyba, że chcesz się odwoływać do innej domeny gdzie są przetrzymywane same obrazki).
Niestety muszę całą subdomenę umieścić w regule, ponieważ ona wskazuje na controller i akcję oraz jednocześnie oddziela ten controller od reszty serwisu. Jeżeli urlFormat ustawiem na path reguły zaczynają działać, lecz serwis zaczyna generować linki typu "mojastrona.pl/index.php/contraller/akcja/". Zdjęcia do serwisu są umieszczone w folderze mojastrona.pl/img/ , a przeglądarka będzie ich szukać w folderze mojastrona.pl/index.php/contraller/akcja/img/ , którego nie ma. Dlatego urlFormat musi być ustawiona na get. Mogę też zrobić oddzielną stronę dla subdomeny, ale chciałbym aby serwis był jednym działającym systemem.
A czy nie lepiej zrobić to inaczej. W urlManager ustawić regułę przepisującą ścieżkę ‘/zdjecie’ np. na ‘/image/view/imgname’. Czyli ktoś kto by wpisał http://mojadomena.pl/zdjecie/cos.jpg uruchamiałby funkcję view kontrolera image z parametrem ‘imgname’=> cos.jpg . Funkcja ‘view’ mogła by pobierać z bazy danych typ mime obrazka, pobierać jego zawartość (np. readfile) i wyświetlać poprzez renderPartial i header? Jeśli nie chcesz z bazy danych można zaczytać typ mime za pomocą fileinfo(). Dzięki takiemu podejściu wyświetlasz obrazki za pośrednictwem kontrolera co ma taki plus, że możesz sprawdzać uprawnienia np. do pojedynczego obrazka itp.
Prawdopodobnie twoja propozycja zadziałałaby, ale na mojej stronie zwykle jest przynajmniej 30 miniaturek i zdjęć, które po naniesieniu zmian musiałyby wywoływać system strony. Jeżeli odświeżenie jednej strony miałoby wywoływać 30 aplikację www, to raczej takie rozwiązanie nie jest optymalne. Wiem że yii jest wspaniałym narzędziem i ładuje tylko niezbędne komponenty do działania, ale raczej wolałbym aby zdjęcia nie obciążały znacząco serwisu. Poza tym ja nie mam jakiś ściśle tajnych zdjęć, które wymagałyby dużej ochrony.
Czaję. W takim razie ja bym tego nie przepuszczał przez urlmanager tylko napisał regułę w .htaccess zmieniającą ‘/mojastrona.pl/img’ na np ‘/img’. Bo chodzi tylko o ładnego lika do niechronionych obrazków?
Dzięki za pomoc. Udało mi się zmienić htaccess aby przepisywał ścieżkę zdjęć poprawnie. urlFormat ustawiłem na path i CUrlManager zaczął obsługiwać reguły.