我一整天都在思考这个问题,但到目前为止似乎什么都没有奏效。我承认这是一个非常蹩脚的问题,但我现在甚至不能准确地解释它,但我会尝试并期待得到一些帮助!
我有一个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
中,我取了一个数组,其中有slgs和名称,像这样:
<?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}
部分的根,但仍然看到它在地址栏或至少了解问题隐藏在哪里。
这个问题出现在HTML链接标签和导航中自动生成的超链接中。现在他们看到的基本路径是
www.example.com/porfolio/test/blog/{some article}
,所以文件的路径现在是错误的,所以我看不到我的样式和图片。
这听起来像是客户端相对路径"问题"。如果你的样式和图片使用相对url, url现在是相对于/porfolio/test/blog/
,而不是/porfolio/test/
。
您需要在您的客户端HTML中使用绝对url或根相对url(以斜杠开始),或者在head
部分中使用base
标记,通知浏览器这些相对路径是相对的内容。
请参阅我在专业网站管理员堆栈上的回答:
.htaccess重写url导致缺少css