2011-07-01 16 views
5

Mam dziwny problem dla mnie. Zajmuję się tworzeniem aplikacji Zend Framework i mają tę strukturę plików:htaccess przekierowuje nieoczekiwanie do folderu

/ 
/application/ 
/public/ 
/public/.htaccess 
/public/index.php 
/public/js/ 
/public/style/ 
/public/profile/ 
/.htaccess 

Chodzi mi domenę do folder /

Kiedy wprowadź adres example.com/profile/ idzie do profilu kontrolera i to jest dobre. Kiedy wprowadź adres example.com/profile serwer przekierowuje mnie: example.com/public/profile/

chciałbym mieć rozwiązanie, że ilekroć żądanie: example.com/profile/ lub example.com/profile

tej samej stronie będą renderowane ale druga wersja daje mnie przekierowanie i nie wiem dlaczego.

Plik /.htaccess jest:

RewriteEngine On 
RewriteRule ^(.*)$ public/$1 [L] 

Zadaniem tego pliku jest na trasie cały ruch z/do/publiczny, ale bez żadnych przekierowań.

Plik /public/.htaccess jest:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

Czy ktoś może mi pomóc z tym? Dzięki.


Naprawiłem to. Oto rozwiązanie, jeśli ktoś ma ten sam problem: Do tego trzeba ustawić następujące opcje i wyłączyć DirectorySlash naprawić

Options -Indexes FollowSymLinks 
DirectorySlash Off 

Teraz Apache nie powinna dodać końcowe ukośniki na końcu URI podczas wskazując katalogu . To również wyłącza przekierowanie do URI z końcowym ukośnikiem.

+0

dlaczego nie spróbujesz 'RewriteEngine On RewriteCond% { REQUEST_FILENAME} -s [OR] RewriteCond% { REQUEST_FILENAME} -l RewriteRule^(. *) $ Public/index.php [L] 'w Twojej pierwszej wersji' .htaccess' –

+0

Następnie mam błąd w dzienniku Apache: żądanie przekroczyło limit 10 wewnętrznych przekierowań – Marcin

+0

Dodałem do zewnętrznego htaccess ten kod: RewriteEngine On (. *)RewriteRule^$ publiczny/1 $ RewriteCond% {REQUEST_FILENAME} -s [or] RewriteCond% {REQUEST_FILENAME} -l RewriteRule^* $ -.. [NC L] RewriteRule^* $ index.php [NC, L], a teraz mam wewnętrzny błąd serwera z powodu wielu wewnętrznych przekierowań ... – Marcin

Odpowiedz

1

Opcjonalnie pasuje do ostatniego /. Zmień swój plik .htaccess do tego:

RewriteEngine On 
RewriteRule ^(.*)/?$ public/$1 [L] 
+0

To działa. Próbuję: http://example.com/profil i przekierowuje mnie do http://example.com/public/profil/ Kiedy próbuję http://example.com/profil/, wszystko jest w porządku. – Marcin

+0

Przepraszamy. Mam błąd w tym komentarzu. Kiedy próbuję: example.com/profil przekierowuje do example.com/public/profil/ – Marcin

+0

Czy ktoś ma jakieś rozwiązanie tego problemu? – Marcin

0

Działa to dla mnie:

RewriteEngine On 
RewriteRule ^/$|^(.*)$ /public/$1 [QSA,NC,L] 
Powiązane problemy