2012-02-27 12 views
5

tôi đã thực hiện một 1st cài đặt của Symfony2,Làm cách nào để loại bỏ nhu cầu "/app.php/" trong URL sản xuất của ứng dụng Symfony2 mới?

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

Tôi đã cài đặt nó dưới một DocumentRoot hiện bằng cách cấu hình máy chủ apache2 tôi vhost

<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> 
     ... 

Sau một OK cài đặt, và thành công sau "The Book "để xây dựng bản demo 'Hello' ứng dụng, nếu tôi NAV trong một trình duyệt bất kỳ/tất cả,

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 

tôi thấy mong đợi,

"Xin chào ME!"

Tôi muốn viết lại chỉ URL sản xuất, cất giấu "app.php" để các thiết lập sau đây của URL làm việc trong thanh nav của một trình duyệt cho ứng dụng Symfony2 tôi:

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 , web mặc định/.htaccess

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

cần thay đổi.

Tôi đã đào xung quanh trong các tài liệu và trên web, cố gắng khuyến nghị vdiffferent cho modding các RewriteRule, thêm 'RedirectMatch vĩnh viễn', vv, và tôi không quản lý để có được một đơn giản

http://localhost/TESTAPP/hello/ME

để từng hoạt động. Tôi luôn có vẻ cần thêm "/app.php/".

Các thay đổi cụ thể mà tôi cần thực hiện để làm việc này là gì?

Cảm ơn.


@chasen

được mod_rewrite kích hoạt cho apache?

nếu bạn có tập tin .htaccess của bạn trong thư mục web của bạn

tôi làm

và bạn lưu trữ tập tin trỏ đến thư mục web

nó là, như trên,

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

app.php không nên cần thiết.

đó là vấn đề của tôi. không có nó, nó không làm việc cho tôi.

Cụ thể,

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

lợi nhuận:

"Hello Me"

nhưng

https://localhost/TESTAPP/hello/ME 

lợi nhuận

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 

Trả lời

14

tôi biết rằng một câu hỏi ngớ ngẩn của nó nhưng mod_rewrite kích hoạt cho apache?

nếu bạn có tệp .htaccess trong thư mục web của mình và bạn lưu trữ tệp trỏ đến thư mục web thì không cần dùng app.php.

nếu bạn đang chạy ubuntu hoặc một distro tương tự bạn có thể làm:

sudo a2enmod rewrite 
sudo service apache2 reload 
sudo service apache2 restart 

Điều đó sẽ cho phép các mod, và tải lại apache.

CHỈNH SỬA:

Phản hồi bạn đang quay lại là trong trang symfony? nếu nó là khả năng của mình rằng bộ nhớ cache sản của bạn cần phải được dọn sạch, từ thư mục gốc cho các ứng dụng sử dụng symfony console để xóa bộ nhớ cache:

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

EDIT:

Nếu không có những người đã làm việc bạn có thể thử thêm một RewriteBase đến tập tin .htaccess:

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

xem trả lời ở trên trong OP –

+0

Tôi đã cập nhật câu trả lời của mình với một nội dung mới để thử. – chasen

+0

Vâng, đó là một trang symfony. Tôi đã nhiều lần xóa cả prod & dev cache, đảm bảo bộ nhớ cache của trình duyệt bị xóa, khởi động lại apache, thậm chí khởi động lại máy chủ - chỉ trong trường hợp. Theo báo cáo, URL không có app.php bao gồm thất bại. –

0

thêm quy tắc RewriteBase với tên của thư mục trong đó dự án được tổ chức để các tập tin .htaccess làm đó là công việc! Cảm ơn!

RewriteBase /project_name 
3

Trong trường hợp của tôi, tôi cần phải sửa đổi dòng có chứa AllowOverride None để đọc AllowOverride All. Điều này cho Apache biết rằng nó cho phép các tập tin .htaccess vượt qua các chỉ thị trước đó. Bạn phải tải lại Apache trước sự thay đổi này sẽ có ảnh hưởng (https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles):

Làm điều này: - đi đến "/ etc/apache2" sửa đổi tập tin "apache2.conf" phần:

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

máy chủ
  • khởi động lại:/etc/apache2 apache2 restart # dịch vụ

cần làm việc. Nếu nó không hoạt động, bạn vẫn phải thực hiện 1 bước để đảm bảo .htaccess được phép ghi đè lên. Có nhiều lý do khác có thể được sửa với hướng dẫn trên.