php / symfony2 скрывает app.php из URL-адреса

Рассмотрим следующий URL: http://www.myurl.fr/accueil .

Это не сработает. Однако http://www.myrurl.fr/app.php/accueil действительно работает.

Я избавился от файла .htaccess, потому что хочу использовать файл vhost и полагаться на маршрутизацию Apache. Мой файл vhost следующий:

<VirtualHost my.ip.address> ServerName myurl.fr ServerAlias www.myurl.fr DocumentRoot /var/www/mysite/web DirectoryIndex app.php <Directory "/var/www/mysite/web"> AllowOverride All Allow from All </Directory> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L] RewriteRule .? - [L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.*)$ app.php [QSA,L] RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteRule .? %{ENV:BASE}app.php [L] </IfModule> </VirtualHost> 

Я очистил кэш Apache и перезапустил его много раз. Модификация urlrewrite включена. Я просто не знаю, что еще проверить. Любая идея, что мне не хватает?

EDIT. Возможно, что оба URL-адреса не будут работать в определенное время, так как я работаю над ним. Моя проблема все еще действительна.

Сравнивая ваши правила с Symfony-стандартным .htaccess , я видел, что вы пропустили проверку файлов, прежде чем «передать все правила». Попробуй

 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] # If the requested filename exists, simply serve it. # We only want to let Apache serve files and not directories. RewriteCond %{REQUEST_FILENAME} -f RewriteRule .? - [L] # Rewrite all other queries to the front controller. RewriteRule .? %{ENV:BASE}/app.php [L] </IfModule> 

Документы Symfony предлагают это прямое решение этой проблемы.

 '<VirtualHost *:80> ServerName domain.tld ServerAlias www.domain.tld DocumentRoot /var/www/project/web <Directory /var/www/project/web> AllowOverride None Order Allow,Deny Allow from All <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L] </IfModule> </Directory> # uncomment the following lines if you install assets as symlinks # or run into problems when compiling LESS/Sass/CoffeScript assets # <Directory /var/www/project> # Options FollowSymlinks # </Directory> # optionally disable the RewriteEngine for the asset directories # which will allow apache to simply reply with a 404 when files are # not found instead of passing the request into the full symfony stack <Directory /var/www/project/web/bundles> <IfModule mod_rewrite.c> RewriteEngine Off </IfModule> </Directory> ErrorLog /var/log/apache2/project_error.log CustomLog /var/log/apache2/project_access.log combined </VirtualHost>' 

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

Если вы работаете с Apache, вы должны обязательно включить mod_rewrite!

 `sudo a2enmod rewrite` 

Поэтому, если вы бьете головой о стену, задаетесь вопросом, почему ничего не работает, попробуйте это. Это может спасти ваше здравомыслие и ваш проект! Счастливое кодирование!

измените код виртуального хоста apache httpd.conf на этот

 ServerName my-site.fr <VirtualHost your.ip.address:80> DocumentRoot /var/www/mysite/web <Directory "/var/www/mysite/web"> DirectoryIndex app.php Options -Indexes FollowSymLinks SymLinksifOwnerMatch AllowOverride All Allow from All </Directory> </VirtualHost> 

Ключевое решение здесь – убедиться, что mod_rewrite включен, набрав

 a2enmod rewrite 

Если у вас есть apache 2.4 , проверьте свой конфигурационный файл, а не Order allow.deny

 Require all granted 

Вот пример конфигурации внутри директивы каталога

 AllowOverride all Require all granted 

@icarlosmendez Ваше предложение «sudo a2enmod rewrite» действительно экономит мой день!

Это то, что я сделал, надеюсь, что некоторые люди посчитают это полезным

  1. запустить «sudo a2enmod переписать» сначала
  2. скопируйте код из symfony , поместите его под «/ etc / apache2 / sites-available»
  3. просто примечание для людей, получивших 500 ошибок, проверьте, чтобы var в папке проекта получил 777.