【问题标题】:How to remove "web/app_dev.php" from Symfony2 URLs?如何从 Symfony2 URL 中删除“web/app_dev.php”?
【发布时间】:2016-06-28 23:38:26
【问题描述】:

我刚刚创建了我的第一个 Symfony2 项目。但是 URL 中的“/web/app_dev.php”部分让我很恼火。应该可以做到这一点没有虚拟主机...

但是当我通过 .htaccess 尝试此操作时,我总是遇到路由错误,并且总是将“web/”添加到 url...

编辑:整个项目也在一个名为“symfonyTest”的子目录中。演示页面的 URL 是“http://localhost/symfonyTest/web/app_dev.php/demo/”,它应该变成“http://localhost/symfonyTest/demo/”。链接也应该有这种语法。这可能吗?

【问题讨论】:

  • 您介意显示应用程序的虚拟主机部分吗?

标签: php .htaccess symfony


【解决方案1】:

Symfony2 带有一个内置的调试模式,当您通过 app_dev.php 添加访问 url 时,您正在使用该模式。调试模式的缓存比生产模式的缓存要少得多,生产模式可以通过将浏览器定向到 url 来访问,但省略了 app_dev.php。如果访问此 url 不起作用,则可能意味着您需要清除生产缓存。

要清除缓存,请将终端(命令控制台)指向 Symfony 项目的根目录。从那里输入以下命令:

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

以下在 Symfony 3 中的每个 cmets 已移动:

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

这应该会清除您的产品缓存并允许您在没有 app_dev.php 的情况下访问 url。

至于网址的web部分。删除它的最简单方法是将项目的 Web 根目录设置为 Web 文件夹。最好使用 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>
    

    在 /etc/apache2/sites-available 中的“symfony”条目中:

    <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>
    

    【讨论】:

    • 它几乎对我有用,因为它无法显示所有图像......但它显示了大部分 - 奇怪
    • 我一直试图让我的工作太久了。这非常有效。非常感谢。
    • thorinkor,也许您的其他图像有权限问题,或者您拥有的项目可能看不到它们,例如图像路径可能不正确
    • 复制两个文件,但它显示来自本地主机的所有文件夹和文件:(
    • 经过几个小时的尝试,这个对我有用!非常感谢! =)
    【解决方案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下配置你的hosts文件!)。如果您希望开发环境(app_dev.php)不显示在 url 中,请将 DirectoryIndex 更改为 app_dev.php。

    【讨论】:

      【解决方案5】:
      1. //启用 mod 重写
        sudo a2enmod rewrite

      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

      【讨论】:

        【解决方案6】:

        您需要web 的父文件夹中的.htaccess 文件,但是,我不建议这样做。除了web 之外,该文件夹还包含完整的源代码、二进制文件、供应商等等,因此您需要应用许多规则来允许对web 文件夹进行网络访问并禁止对其他所有内容进行网络访问。

        所以,这是可行的,但我肯定会选择虚拟主机解决方案......

        【讨论】:

          【解决方案7】:

          你只需要将.htaccess文件的内容复制到your-website.conf

          在 TAG 目录中

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-29
            • 2012-08-02
            • 1970-01-01
            • 2020-12-29
            相关资源
            最近更新 更多