Как избавиться от необходимости использовать «/app.php/» в рабочем URL-адресе нового приложения Symfony2? - PullRequest
5 голосов
/ 28 февраля 2012

Я сделал 1-ю установку Symfony2,

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

Я установил его под существующим DocumentRoot, настроив мой сервер apache2 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>
        ...

После установки ОК и успешного следования "Книге", чтобы создать демонстрационное приложение "Привет", если я перехожу в браузере на любое / все из,

  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

вижу ожидаемое,

«Здравствуйте, меня!»

Я хочу переписать только рабочие URL-адреса, скрывая "app.php", чтобы следующий набор URL-адресов работал в навигационной панели браузера для моего приложения 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, по умолчанию web / .htaccess

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

нужно изменить.

Я копался в документах и ​​в Интернете, пробовал vdiffferent рекомендации по изменению RewriteRule, добавлению «перманента RedirectMatch» и т. Д., И мне не удается получить простой

http://localhost/TESTAPP/hello/ME

когда-либо работать. Мне всегда нужно добавить "/app.php/".

Какие конкретные изменения мне нужно сделать, чтобы это заработало?

Спасибо.


@ часенов

включен ли mod_rewrite для apache?

да

если у вас есть файл .htaccess в вашем веб-каталоге

я делаю

и вы размещаете файл, указывающий на веб-папку

это, как указано выше,

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

app.php не требуется.

это моя проблема. без этого это не работает для меня.

В частности,

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

возвращается:

«Привет, мне!»

но

    https://localhost/TESTAPP/hello/ME

возвращает

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

Ответы [ 3 ]

14 голосов
/ 28 февраля 2012

я знаю, что это глупый вопрос, но включен ли mod_rewrite для apache?

если у вас есть файл .htaccess в вашем веб-каталоге, и вы размещаете файл, указывающий на веб-папку, app.php не требуется.

если вы работаете в Ubuntu или аналогичном дистрибутиве, вы можете сделать:

sudo a2enmod rewrite
sudo service apache2 reload
sudo service apache2 restart

Это должно включить мод и перезагрузить Apache.

EDIT:

Этот ответ, который вы получаете, находится на странице Symfony? если есть вероятность, что ваш кэш продукта должен быть очищен, из корневого каталога приложения используйте консоль symfony для очистки кэша:

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

EDIT:

Если ни один из них не сработал, вы можете попробовать добавить RewriteBase в файл htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /TESTAPP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
3 голосов
/ 21 июля 2015

В моем случае мне нужно изменить строку, содержащую AllowOverride None, чтобы прочитать AllowOverride All. Это говорит Apache, что все файлы .htaccess могут переопределять предыдущие директивы. Вы должны перезагрузить Apache, чтобы изменения вступили в силу (https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles):

Сделайте это: - перейдите в раздел "/ etc / apache2" и измените файл apache2.conf:

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

  • перезапустить сервер: / etc / apache2 # service apache2 restart

это должно работать. Если это не работает, вы все равно сделали 1 шаг вправо, чтобы гарантировать, что .htaccess может быть переопределен. Есть много других причин, которые можно исправить с помощью приведенной выше инструкции.

0 голосов
/ 16 июля 2012

Добавление правила RewriteBase с именем папки, в которой находится проект, в файл .htaccess делает свое дело! Спасибо!

RewriteBase /project_name
...