Как удалить «web / app_dev.php» из URL-адресов Symfony2?

Я только что создал свой первый проект Symfony2. Но часть «/web/app_dev.php» в URL-адресе меня раздражает. Это можно сделать без виртуальных хостов …

Но когда я пробую это через .htaccess, я всегда получаю ошибки маршрутизации, и «web /» всегда добавляется в url …

EDIT: весь проект также находится в подкаталоге с именем «symfonyTest». Url на демо-странице «http: //localhost/symfonyTest/web/app_dev.php/demo/», и он должен стать «http: // localhost / symfonyTest / demo /». Ссылки должны также иметь этот синтаксис. Это возможно?

Symfony2 поставляется со встроенным режимом отладки, который вы используете при доступе к url ​​с добавлением app_dev.php. Режим отладки кэшируется значительно меньше, чем режим производства, к которому можно получить доступ, направляя ваш браузер на URL-адрес, но не указывая app_dev.php. Если доступ к этому URL-адресу не работает, это, вероятно, означает, что вам необходимо очистить кеш-память.

Чтобы очистить кеш, вы можете подключить терминал (консоль управления) к корню вашего проекта Symfony. Оттуда введите следующую команду:

php app/console cache:clear --env=prod --no-debug 

По комментариям ниже в Symfony 3 это переместилось:

 php bin/console cache:clear --env=prod --no-debug 

Это должно очистить кеш вашего производства и позволить вам получить доступ к URL-адресам без приложения app_dev.php.

Что касается веб-части URL. Самый простой способ удалить это – установить веб-корень вашего проекта в веб-папку. Лучше всего сделать это с помощью apache с помощью виртуальных хостов, но есть способы сделать это с помощью htaccess.

В этой ссылке объясняется, как использовать файл htaccess для изменения webroot. http://kb.siteground.com/how_to_change_my_document_root_folder_using_an_htaccess_file/

Надеюсь это поможет!

 <VirtualHost *:80> DocumentRoot "path_to_symfonyTest/web" ServerName "symfonyTest" <Directory "path_to_symfonyTest/web"> DirectoryIndex app_dev.php AllowOverride All Order allow,deny Allow from all RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app_dev.php [QSA,L] RedirectMatch permanent ^/app_dev\.php/(.*) /$1 </Directory> </VirtualHost> 

Это часть моего httpd.conf

У меня тоже была эта проблема, пожалуйста, взгляните на мои настройки и попробуйте их

внутри моего .htaccess:

Привет всем, у меня тоже была эта проблема. И кажется, что проблема «запаса» .htaccess – проблема. Я решил это в своей среде, и вот мой .htaccess с примечаниями:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^app_dev.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] ##### this is the part that you should tweak, have the .htaccess point the request to app_dev.php, since the routing.yml is empty initially RewriteCond %{REQUEST_FILENAME} -f RewriteRule .? - [L] RewriteRule .? %{ENV:BASE}/app_dev.php [L] ##### this is the part that you should tweak, have the .htaccess point the request to app_dev.php, since the routing.yml is empty initially </IfModule> <IfModule !mod_rewrite.c> <IfModule mod_alias.c> # When mod_rewrite is not available, we instruct a temporary redirect of # the startpage to the front controller explicitly so that the website # and the generated links can still be used. RedirectMatch 302 ^/$ /app.php/ # RedirectTemp cannot be used instead </IfModule> </IfModule> 

внутри моей записи «symfony» в / etc / apache2 / sites-available:

 <VirtualHost 127.0.1.15> ServerAdmin webmaster@localhost ServerName symfony DocumentRoot /var/www/Symfony/web DirectoryIndex app.php <Directory /var/www/Symfony/web> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Если вы используете виртуальный хост apache, вы можете заставить его работать так, как вам хочется. Вот пример виртуального хоста из моего xampp:

 <VirtualHost *:80> ServerName myurl.local # Basic stuff DocumentRoot "C:/path/to/symfony/web" DirectoryIndex app.php <Directory "C:/path/to/symfony/web"> AllowOverride All Allow from All </Directory> </VirtualHost> 

После перезапуска вашего apache вы можете получить доступ к проекту через http: //myurl.local (не забудьте настроить файл хостов в папке C:\Windows\system32\drivers\etc\hosts !). Если вы хотите, чтобы среда dev (app_dev.php) не отображалась в URL-адресе, измените DirectoryIndex на app_dev.php.

Вам понадобится файл .htaccess в родительской папке web , однако я бы не предложил сделать это. Эта папка, помимо web , содержит полный источник, двоичные файлы, поставщики и многое другое, поэтому вам нужно будет применить множество правил, чтобы разрешить веб-доступ к web папке и запретить доступ к веб-доступу ко всему остальному.

Итак, это выполнимо, но я бы определенно пошел на решение vhost …

  1. // разрешить переписывание мод
    sudo a2enmod переписать

  2. Измените все вхождения AllowOverride None на AllowOverride All
    Файл: ( /etc/apache2/apache2.conf ) или ( /etc/apache2/sites-available/000-default.conf ) – для меня работает файл /etc/apache2/apache2.conf.

Пример:

 <Directory /var/www/web/> # enable the .htaccess rewrites Options Indexes FollowSymLinks #AllowOverride None #commented AllowOverride All Require all granted </Directory> 
  1. // Перезапуск службы Apache:
    sudo service apache2 restart

вам просто нужно скопировать содержимое файла .htaccess в your-website.conf

внутри каталога TAG