前端控制器重定向有效但某些路由的路由错误

时间:2016-09-15 00:28:10

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

我整天都围绕着这个问题,到目前为止似乎没有任何工作。我承认这可能是一个非常蹩脚的问题,但我现在甚至无法解释它,但我会尽力期待得到一些帮助!

我有一个带前端控制器的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中我使用一个带有slugs和名字的数组:

<?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}部分,但仍然在地址栏中看到它或者至少了解隐藏问题的位置。

1 个答案:

答案 0 :(得分:0)

  

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

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

您需要在客户端HTML中使用绝对或根相对(以斜杠开头)网址,或使用base部分中的head标记,通知浏览器这些相对路径 relative to。

有关详细信息,请参阅Pro网站管理员堆栈中的答案:
.htaccess rewrite url leads to missing css