Как удалить "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/". Ссылки должны также иметь этот синтаксис. Возможно ли это?
Ответы
Ответ 1
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/
Надеюсь, это поможет!
Ответ 2
<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
Ответ 3
У меня тоже была эта проблема, пожалуйста, взгляните на мои настройки и попробуйте их
внутри моего .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/apache 2/sites-available:
<VirtualHost 127.0.1.15>
ServerAdmin [email protected]
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>
Ответ 4
Если вы используете виртуальный хост 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.
Ответ 5
Вам понадобится .htaccess
файл в родительской папке web
, однако я бы не предложил сделать это. Эта папка, кроме web
, содержит полный источник, двоичные файлы, поставщики и многое другое, поэтому вам нужно будет применить множество правил, чтобы разрешить доступ к веб-доступу в папку web
и запретить доступ к веб-доступу ко всему остальному.
Итак, это выполнимо, но я бы определенно пошел на решение vhost...
Ответ 6
-
//включить mod rewrite
sudo a2enmod переписать
-
Измените все вхождения AllowOverride None на AllowOverride All
Файл: (/etc/apache2/apache2.conf > ) или (/etc/apache2/sites-available/000-default.conf) - для меня работа с файлом /etc/apache 2/apache2.conf.
Пример:
<Directory /var/www/web/>
# enable the .htaccess rewrites
Options Indexes FollowSymLinks
#AllowOverride None #commented
AllowOverride All
Require all granted
</Directory>
- //Перезапустить службу apache:
sudo service apache2 restart
Ответ 7
вам просто нужно скопировать содержимое файла .htaccess
в your-website.conf
внутри каталога TAG