【问题标题】:Front controller redirection works but the route is wrong for some routes前端控制器重定向有效,但某些路由的路由错误
【发布时间】:2016-09-15 00:28:10
【问题描述】:

我整天都在思考这个问题,但到目前为止似乎没有任何效果。我承认这可能是一个非常蹩脚的问题,但目前我什至无法准确解释,但我会努力并期待得到一些帮助!

我有一个带有前端控制器的 MVC 站点。所有请求都被重定向到index.php 并且取决于URI(我使用带有路由的特殊数组使用户友好)我的前端控制器调用正确的控制器。标准路由。基本上它工作正常。除了一个细微差别。

我的.htaccess 文件包含以下内容:

RewriteEngine on
RewriteBase /portfolio/test/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php

这是我用于用户友好 URL 并调用相应控制器的路由示例:

    <?php

return array (
  'main'               => 'index/main', //actionMain in IndexController
  'contact'            => 'contact/index', 
  'prise'              => 'price/index',  
  'blog/([0-9]+)'      => 'blog/post/$1',  
  'blog'               => 'blog/list',
   etc...       
);

如果我转到/main 页面,一切都很好,然后我点击带有/portfolio 的链接,一切都很好。

顺便说一下,我的导航是使用带有“slug”和“name”的数组作为菜单按钮自动完成的。所以在nav.php 中,我采用了一个带有 slug 和名称的数组:

<?php

    $navItems = array(

         array(
            'slug'            => "main",
            'title'           => "Main"
            ),

         array(
            'slug'            => "portfolio",
            'title'           => "Portfolio"
            ),

        array(
            'slug'            => "prise",
            'title'           => "Prise List"
            ),

        etc...

    );

    ?>

我对这个数组使用foreach,并像这样自动制作按钮:

echo "<a href=\"$Item[slug]\">"

但是当我转到blog/{some_article}(例如blog/1)或直接将blog/放入我的基本路径(即www.example.com/porfolio/test/)之后的地址字段时,就会出现问题。而且似乎问题不在于重定向,因为调用了正确的控制器,甚至我的数据库中的数据也在这里。该问题出现在 HTML 链接标签中,并在导航中自动创建超链接。现在他们将基本路径视为www.example.com/porfolio/test/blog/{some article},所以文件的路径现在是错误的,所以我看不到我的样式和图片。我需要以某种方式摆脱基本根目录的 blog/{some article} 部分,但仍然可以在地址栏中看到它,或者至少了解问题隐藏在哪里。

【问题讨论】:

    标签: php .htaccess redirect model-view-controller front-controller


    【解决方案1】:

    问题出现在 HTML 链接标签中,并在导航中自动生成超链接。现在他们将基本路径视为www.example.com/porfolio/test/blog/{some article},所以文件路径现在是错误的,所以我看不到我的样式和图片。

    这听起来像是客户端相对路径“问题”。如果您对样式和图片使用相对 URL,则 URL 现在是相对于 /porfolio/test/blog/,而不是 /porfolio/test/

    您需要在客户端 HTML 中使用绝对或根相对(以斜杠开头)URL,或者在head 部分使用base 标记,告知浏览器这些相对路径是什么相对。

    有关详细信息,请参阅我在 Pro Webmasters Stack 上的回答:
    .htaccess rewrite url leads to missing css

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多