2012-02-27 5 views
5

Zrobiłem 1-ta instalacja Symfony2,Jak pozbyć się potrzeby "/app.php/" w nowym, produkcyjnym adresie URL Symfony2?

php app/console --version 
     Symfony version 2.0.11 - app/dev/debug 

zainstalowałem go pod istniejącym DocumentRoot konfigurując mojego serwera apache2 vhosta

<VirtualHost 127.0.0.1:80> 
     ... 
     DocumentRoot /srv/www/localhost_www 
     ... 
     <Directory "/srv/www/localhost_www" > 
      AllowOverride none 
      Options -ExecCGI +FollowSymLinks +Includes +Indexes +MultiViews 
      Order Allow,Deny 
      Allow from All 
     </Directory> 
     ... 
     Alias /TESTAPP "/srv/www/TESTAPP/web/" 
     <Directory "/srv/www/TESTAPP/web/"> 
      Options All 
      AllowOverride All 
      Allow from All 
     </Directory> 

     Alias /TESTAPP.symfony "/srv/www/TESTAPP/" 
     <Directory "/srv/www/TESTAPP/"> 
      Options All 
      AllowOverride All 
      Allow from All 
     </Directory> 
     ... 

Po OK zainstalować i skutecznie po „The Book "zbudować demo«Hello»aplikację, jeśli ja nav w przeglądarce którąkolwiek/wszystkich,

dev: 
     http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME 
     http://localhost/TESTAPP/app_dev.php/hello/ME 
    prod: 
     http://localhost/TESTAPP.symfony/web/app.php/hello/ME 
     http://localhost/TESTAPP/app.php/hello/ME 

widzę oczekiwaniami

"Hello ME!"

Chcę przepisać tylko URL produkcyjnych, ukrywając „app.php” tak, że następujący zestaw adresów URL działa w pasku nawigacyjnym z przeglądarki dla mojej aplikacji Symfony2:

dev: 
     http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME 
     http://localhost/TESTAPP/app_dev.php/hello/ME 
    prod: 
    !! http://localhost/TESTAPP.symfony/web/hello/ME 
    !! http://localhost/TESTAPP/hello/ME 

IIUC , domyślna sieć/.htaccess musi się zmienić.

mam grzebać w docs i w internecie, próbował zalecenia vdiffferent dla modding ten RewriteRule, dodając „RedirectMatch stałe”, itd., A ja nie udaje się uzyskać prosty

http://localhost/TESTAPP/hello/ME

kiedykolwiek pracować. Zawsze wydaje mi się, że muszę dodać "/app.php/".

Jakie są szczegółowe zmiany, które muszę wprowadzić, aby to zadziałało?

Dzięki.


@chasen

jest mod_rewrite włączone dla Apache?

tak

jeśli masz plik .htaccess w katalogu WWW

i zrobić

i organizację plik wskazując folderze internetowej

to jest, jak wyżej,

Alias /TESTAPP "/srv/www/TESTAPP/web/" 
     <Directory "/srv/www/TESTAPP/web/"> 

app.php nie powinna być konieczna.

to mój problem. bez niego to nie działa dla mnie.

szczególności

https://localhost/TESTAPP/app.php/hello/ME 

powraca:

"Hello Me"

ale

https://localhost/TESTAPP/hello/ME 

powraca

Object not found! 

The requested URL was not found on this server. 
If you entered the URL manually please check your 
spelling and try again. 

If you think this is a server error, please contact 
the webmaster. 
Error 404 

Odpowiedz

14

wiem, że jest to głupie pytanie, ale jest mod_rewrite włączone dla Apache?

Jeśli posiadasz plik .htaccess w swoim katalogu i plik hosta wskazujący na folder sieciowy, aplikacja app.php nie powinna być potrzebna.

jeśli używasz ubuntu lub podobnego distro można zrobić:

sudo a2enmod rewrite 
sudo service apache2 reload 
sudo service apache2 restart 

To powinno umożliwić mod i przeładować apache.

EDIT:

że odpowiedź otrzymujesz z powrotem jest na stronie symfony? jeśli jest to jego prawdopodobne, że cache prod musi zostać usunięte z katalogu głównego dla aplikacji użyć konsoli symfony, aby wyczyścić pamięć podręczną:

php app/console cache:clear --env="prod" 

EDIT:

Jeżeli żadna z tych pracowali ci może spróbuj dodać RewriteBase do pliku .htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /TESTAPP 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ app.php [QSA,L] 
</IfModule> 
+0

zobacz odpowiedź powyżej w OP –

+0

Zaktualizowałem moją odpowiedź z czymś nowym do wypróbowania. – chasen

+0

Tak, to strona z symfony. Wielokrotnie usuwałem pamięć podręczną prod & dev, upewniłem się, że pamięć podręczna przeglądarki jest wyczyszczona, zrestartowałem apache, a nawet zrestartowałem serwer - na wszelki wypadek. Jak informowaliśmy, URL non-app.php konsekwentnie kończy się niepowodzeniem. –

0

Dodawanie reguły RewriteBase z nazwą folderu, w którym projekt jest utrzymywany w pliku .htaccess robi to zadanie! Dzięki!

RewriteBase /project_name 
3

W moim przypadku muszę zmodyfikować wiersz zawierający AllowOverride None, aby przeczytać AllowOverride All. To mówi Apache'owi, że może zezwolić na pliki .htaccess, aby przeładować poprzednie dyrektywy. trzeba przeładować Apache zanim ta zmiana będzie miała wpływ (https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles):

Należy: - sekcja Przejdź do "/ etc/apache2" Modyfikuj plik "apache2.conf":

<Directory /var/www/> 
    Options FollowSymLinks 
    AllowOverride All 
    Require all granted 

serwer
  • restart:/etc/apache2 apache2 # service restart

powinno działać. Jeśli to nie zadziała, nadal wykonałeś 1 krok, aby się upewnić, że .htaccess może zignorować. Istnieje wiele innych powodów, które można naprawić za pomocą powyższej instrukcji.