Я только что создал свой первый проект 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 …
// разрешить переписывание мод
sudo a2enmod переписать
Измените все вхождения 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>
вам просто нужно скопировать содержимое файла .htaccess
в your-website.conf
внутри каталога TAG