Подтвердить что ты не робот

Как удалить "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/". Ссылки должны также иметь этот синтаксис. Возможно ли это?

4b9b3361

Ответ 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>
  1. //Перезапустить службу apache:
    sudo service apache2 restart

Ответ 7

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

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