Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Link bez index.php w adresie
Forum PHP.pl > Forum > PHP > Frameworki
perwer
Witam serdecznie, to mój pierwszy post tym forum i od razu chciałem poprosić o pomoc. Strona postawiona na Symfony dostępna jest w taki sposób:
http://mojastrona.pl/index.php - główna
http://mojastrona.pl/

http://mojastrona.pl/index.php/kategoria/podstrona - podstrony
http://mojastrona.pl/kategoria/podstrona

Pytanie teraz, jak pozbyć się tego cholernego index.php. Czy mogę to jakoś w htaccessie przekierować na opcję bez "index.php"? Szukałem już w oficjalnych tutorialach i dokumentacji i niestety sobie nie poradziłem. Nadal można wejść na obie wersje.

Jeśli ma to jakieś znaczenie, to strona hostowana jest na home.pl

Z góry dzięki za pomoc.
Michał
janek9
Cytat(perwer @ 18.11.2009, 13:55:54 ) *
Witam serdecznie, to mój pierwszy post tym forum i od razu chciałem poprosić o pomoc. Strona postawiona na Symfony dostępna jest w taki sposób:
http://mojastrona.pl/index.php - główna
http://mojastrona.pl/

http://mojastrona.pl/index.php/kategoria/podstrona - podstrony
http://mojastrona.pl/kategoria/podstrona

Pytanie teraz, jak pozbyć się tego cholernego index.php. Czy mogę to jakoś w htaccessie przekierować na opcję bez "index.php"? Szukałem już w oficjalnych tutorialach i dokumentacji i niestety sobie nie poradziłem. Nadal można wejść na obie wersje.

Jeśli ma to jakieś znaczenie, to strona hostowana jest na home.pl

Z góry dzięki za pomoc.
Michał



a masz ustawiony w pliku settings.yml, w srodowisku produkcyjnym: no_script_name: on ?
perwer
Ustawione jest od dawna. Próbowałem normalnie już wszystkiego co udało mi się wyszperać w G. Może w samym .htaccess tkwi błąd?
Wygląda tak:

Cytat
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# uncomment the following line, if you are having trouble
# getting no_script_name to work
#RewriteBase /

# we skip all files with .something
# comment the following 3 lines to allow periods in routes
#RewriteCond %{REQUEST_URI} \..+$ [OR]
#RewriteCond %{REQUEST_URI} \/forum/.*
#RewriteCond %{REQUEST_URI} !\.html$
#RewriteRule .* - [L]

# we check if the .html version is here (caching)
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f

# no, so we redirect to our front web controller
RewriteRule ^(.*)$ index.php [QSA,L]
phpion
Może trochę po partyzancku, ale powinno zadziałać. Wrzuć na początku index.php:
  1. $uri = $_SERVER['REQUEST_URI'];
  2.  
  3. //echo $uri.'<br>';
  4.  
  5. if (strstr($uri, '/index.php')) {
  6. $uri = str_replace('/index.php', '', $uri);
  7.  
  8. if (!isset($uri[0]) || $uri[0] != '/') {
  9. $uri = '/'.$uri;
  10. }
  11.  
  12. //echo $uri.'<br>';
  13.  
  14. header ('HTTP/1.1 301 Moved Permanently');
  15. header('Location: '.$uri);
  16. }
perwer
Teraz przy próbie wejścia na wersję z index.php dostaję:

"500 Internal Error
The server encountered an internal error and could not complete your request" - czyli nie ma przekierowania na wersje "bez".

Wersja bez index.php działa.
jarre1987
Cytat(perwer @ 19.11.2009, 11:15:52 ) *
Teraz przy próbie wejścia na wersję z index.php dostaję:

"500 Internal Error
The server encountered an internal error and could not complete your request" - czyli nie ma przekierowania na wersje "bez".

Wersja bez index.php działa.


Tutaj jest podobny problem, ale ze bez index.php nie dzialaja zadne linki. Moze byc pomocne..

http://forum.symfony-project.org/index.php...x.php#msg_80370
perwer
Już czytałem ten wątek i nic nie dałem rady zmienić. W temacie Symfony jestem laikiem, ale czy te właściwości w settings.yml są właściwe:

Cytat
prod:
.settings:
no_script_name: on
cache: on


"no_script_name" jest podręcznikowo załączone, nie wiem co ma z tym wspólnego "cache". W każdym razie w htaccessie "no_script_name" jest zakomentowane, więc wnioskowałem, że to kwestia htaccessa. Próbowałem bez "#" ale nic to nie dało.
jarre1987
Znalazłem w necie cos takiego. Napisz jezeli bedzie dzialalo bo sam jestem bardzo ciekawy.

http://www.forum.optymalizacja.com/index.php?showtopic=62516
perwer
To musi być to. Rozwiązanie cały czas miałem przed oczami. bo na PIO też szukałem. Niemniej jednak jest ono tylko połowiczne:

Przy wejściu na

http://mojastrona.pl/index.php


Przekierowuje poprawnie na:

http://mojastrona.pl/

Teraz jeszcze muszę jakoś przepisać żeby przy wejściu na:

http://mojastrona.pl/index.php/kategoria/podstrona

Przekierowało na:

http://mojastrona.pl/kategoria/podstrona

W każdym razie jest blisko, ale działa tylko dla głównej. Jakiś pomysł jak zmodyfikować tę regułę z PiO:

Kod
# reguła testująca - jeżeli wywołaniem jest dokładnie ciąg znaków "/index.php" i żaden znak więcej ($ oznacza koniec ciągu, ^ początek)
RewriteCond %{REQUEST_URI} ^\/index.php$
# reguła testująca - sprawdza czy nie ma zapytania ?param1=1&param2=2
RewriteCond %{QUERY_STRING} ^$
# reguła przepisująca
RewriteRule ^(.*)$ http://domena.tld/ [L,R=301]
jarre1987
Sory ze znowu zapodaje linka, ale nie chce mi sie wklejac tego tekstu. Wydaje mi sie ze trzeba ustawic to w <Directory>. Ale to tylko moje domysly.

http://www.jtz.org.pl/Inne/Apache/Mod/core.html#directory
perwer
Dobry link nie jest zły, ale z tego nic nie rozumiem. Ja to humanista jestem ;]
jarre1987
Cytat(perwer @ 19.11.2009, 16:06:43 ) *
Dobry link nie jest zły, ale z tego nic nie rozumiem. Ja to humanista jestem ;]


Ja tez za dobry nie jestem w tym. Poszukaj w dokumentacji apache o mod_rewrite, szczegolnie RewriteCond i RewriteRule.
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.