Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php apache服务器上的Symfony重定向太多_Php_Apache_Symfony - Fatal编程技术网

Php apache服务器上的Symfony重定向太多

Php apache服务器上的Symfony重定向太多,php,apache,symfony,Php,Apache,Symfony,尽管我在网上搜索过,但还没有找到答案 我制作了一个简单的Symfony项目,使用Symfony服务器在devenv上运行良好 我决定把它放在apache服务器上,在进行一些现场测试之前预览它,但我一直面临一些问题 我制作了一个博客部分,在没有帖子的情况下显示得很好,但如果我添加了一篇(或多篇)帖子,我会在太多重定向上出错。 开发工具说我有很多这样的请求: -博客 -博客/ -博客 -博客/ - ... 和崩溃 我使用了symfony/apache包,它为我提供了.htaccess: # Use

尽管我在网上搜索过,但还没有找到答案

我制作了一个简单的Symfony项目,使用Symfony服务器在devenv上运行良好

我决定把它放在apache服务器上,在进行一些现场测试之前预览它,但我一直面临一些问题

我制作了一个博客部分,在没有帖子的情况下显示得很好,但如果我添加了一篇(或多篇)帖子,我会在太多重定向上出错。 开发工具说我有很多这样的请求: -博客 -博客/ -博客 -博客/ - ... 和崩溃

我使用了symfony/apache包,它为我提供了.htaccess:

# Use the front controller as index file. It serves as a fallback solution when
# every other rewrite/redirect fails (e.g. in an aliased environment without
# mod_rewrite). Additionally, this reduces the matching process for the
# start page (path "/") because otherwise Apache will apply the rewriting rules
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
DirectoryIndex index.php

# By default, Apache does not evaluate symbolic links if you did not enable this
# feature in your server configuration. Uncomment the following line if you
# install assets as symlinks or if you experience problems related to symlinks
# when compiling LESS/Sass/CoffeScript assets.
# Options FollowSymlinks

# Disabling MultiViews prevents unwanted negotiation, e.g. "/index" should not resolve
# to the front controller "/index.php" but be rewritten to "/index.php/index".
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Determine the RewriteBase automatically and set it as environment variable.
    # If you are using Apache aliases to do mass virtual hosting or installed the
    # project in a subdirectory, the base path will be prepended to allow proper
    # resolution of the index.php file and to redirect to the correct URI. It will
    # work in environments without path prefix as well, providing a safe, one-size
    # fits all solution. But as you do not need it in this case, you can comment
    # the following 2 lines to eliminate the overhead.
    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
    RewriteRule .* - [E=BASE:%1]

    # Sets the HTTP_AUTHORIZATION header removed by Apache
    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]

    # Redirect to URI without front controller to prevent duplicate content
    # (with and without `/index.php`). Only do this redirect on the initial
    # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
    # endless redirect loop (request -> rewrite to front controller ->
    # redirect -> request -> ...).
    # So in case you get a "too many redirects" error or you always get redirected
    # to the start page because your Apache does not expose the REDIRECT_STATUS
    # environment variable, you have 2 choices:
    # - disable this feature by commenting the following 2 lines or
    # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
    #   following RewriteCond (best solution)
    #RewriteCond %{ENV:REDIRECT_STATUS} =""
    #RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    # Rewrite all other queries to the front controller.
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        # When mod_rewrite is not available, we instruct a temporary redirect of
        # the start page to the front controller explicitly so that the website
        # and the generated links can still be used.
        RedirectMatch 307 ^/$ /index.php/
        # RedirectTemp cannot be used instead
    </IfModule>
</IfModule>
奇怪的事实: 当我通过示例将路由更改为“blog/list”时,效果很好 再次返回“博客”错误

我不明白是否有一些静态页面被路由为“main”,子页面“main/sub”的处理方式与博客类似,但没有数据库交互


有人有这个问题吗?

不要使用重写包

遵循手册

“Apache with mod_php/php-CGI”一节,配置示例使用allowOverride none

<VirtualHost *:80>
    ServerName domain.tld
    ServerAlias www.domain.tld

    DocumentRoot /var/www/project/public
    DirectoryIndex /index.php

    <Directory /var/www/project/public>
        AllowOverride None
        Order Allow,Deny
        Allow from All

        FallbackResource /index.php
    </Directory>

    # uncomment the following lines if you install assets as symlinks
    # or run into problems when compiling LESS/Sass/CoffeeScript assets
    # <Directory /var/www/project>
    #     Options FollowSymlinks
    # </Directory>

    # optionally disable the fallback resource for the asset directories
    # which will allow Apache to return a 404 error when files are
    # not found instead of passing the request to Symfony
    <Directory /var/www/project/public/bundles>
        DirectoryIndex disabled
        FallbackResource disabled
    </Directory>
    ErrorLog /var/log/apache2/project_error.log
    CustomLog /var/log/apache2/project_access.log combined

    # optionally set the value of the environment variables used in the application
    #SetEnv APP_ENV prod
    #SetEnv APP_SECRET <app-secret-id>
    #SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"
</VirtualHost>

ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot/var/www/project/public
DirectoryIndex/index.php
不允许超限
命令允许,拒绝
通融
FallbackResource/index.php
#如果将资产安装为符号链接,请取消注释以下行
#或者在编译更少的/Sass/CoffeeScript资产时遇到问题
# 
#选项如下符号链接
# 
#(可选)禁用资产目录的回退资源
#这将允许Apache在保存文件时返回404错误
#未找到,而是将请求传递给Symfony
目录索引已禁用
后备资源已禁用
ErrorLog/var/log/apache2/project\u error.log
CustomLog/var/log/apache2/project\u access.log组合
#(可选)设置应用程序中使用的环境变量的值
#设置环境应用程序和环境产品
#SetEnv应用程序_机密
#SetEnv数据库_URL“mysql://db_user:db_pass@主持人:3306/db_name“

symfony默认情况下会尝试通过重定向删除尾部斜杠(自symfony 4.1以来),(您的?)apache显然会尝试通过重定向添加尾部斜杠。我认为区别在于,当“更深层次”的文件夹存在或不存在时。。。我非常不喜欢后面的斜杠…好的,谢谢!我将进一步研究apache配置!可能不在.htaccess中,但在VHost中
 /**
     * @Route("/blog/articles", name="blog")
     */
    public function index()
    {
        $blogpost = $this->getDoctrine()
            ->getRepository(BlogPost::class)
            ->findAll();

        if (!$blogpost) {
            $nopblogost = true;
        } else {
            $nopblogost = false;
        }
        return $this->render('blog/index.html.twig', [
            'controller_name' => 'BlogController',
            'page_title' => "mon Blog",
            'message' => null,
            'page_class' => "path-blogpage",
            'blog_empty' => $nopblogost,
            'blogpost' => $blogpost
        ]);
    }

    /**
     * @Route("/blog/post/{id}", name="blogpost")
     */
    public function view($id)
    {
        $blogpost = $this->getDoctrine()
            ->getRepository(BlogPost::class)
            ->find($id);

        if (!$blogpost) {
            $nopblogost = true;
        } else {
            $nopblogost = false;
        }
        return $this->render('blog/view/index.html.twig', [
            'controller_name' => 'BlogController',
            'page_title' => $blogpost->getTitre(),
            'message' => null,
            'page_class' => "path-blogpage",
            'blog_empty' => $nopblogost,
            'post' => $blogpost
        ]);
    }
<VirtualHost *:80>
    ServerName domain.tld
    ServerAlias www.domain.tld

    DocumentRoot /var/www/project/public
    DirectoryIndex /index.php

    <Directory /var/www/project/public>
        AllowOverride None
        Order Allow,Deny
        Allow from All

        FallbackResource /index.php
    </Directory>

    # uncomment the following lines if you install assets as symlinks
    # or run into problems when compiling LESS/Sass/CoffeeScript assets
    # <Directory /var/www/project>
    #     Options FollowSymlinks
    # </Directory>

    # optionally disable the fallback resource for the asset directories
    # which will allow Apache to return a 404 error when files are
    # not found instead of passing the request to Symfony
    <Directory /var/www/project/public/bundles>
        DirectoryIndex disabled
        FallbackResource disabled
    </Directory>
    ErrorLog /var/log/apache2/project_error.log
    CustomLog /var/log/apache2/project_access.log combined

    # optionally set the value of the environment variables used in the application
    #SetEnv APP_ENV prod
    #SetEnv APP_SECRET <app-secret-id>
    #SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"
</VirtualHost>