我整天都围绕着这个问题,到目前为止似乎没有任何工作。我承认这可能是一个非常蹩脚的问题,但我现在甚至无法解释它,但我会尽力期待得到一些帮助!
我有一个带前端控制器的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}
部分,但仍然在地址栏中看到它或者至少了解隐藏问题的位置。
答案 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