这很难解释,所以希望我能在我的问题中理解。
(1)我想创建“SEO友好”链接,从网站中删除查询字符串。只有一个变量,我们称之为“页面”。以下是我的.htaccess
文件的以下代码。
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?page=$1
这适用于提供正确的重定向。因此/applications/
会发送给index.php?page=applications
。
(2)我的index.php将包含一个基于$_GET['page']
值的视图页面。以下是一些示例代码:
switch ($_REQUEST['page']) {
default:
include ("home.php");
break;
case "apps":
include ("apps.php");
break;
}
到目前为止似乎没有问题。
(3)让apps.php
成为home.php
的精确副本。 home.php加载得很好,但apps.php
不会加载链接的CSS和JScript页面。加载apps.php
时,它认为它位于/apps/
目录中。要加载链接的页面,我需要在文件名前面插入一个“../”。然后它会正确显示。
所以我的问题是 - 如何正确编写.htaccess
文件,以便home.php
和apps.php
页面可以是相同的文件并生成相同的结果,而不是{{1文件被视为处于apps.php
目录中?
答案 0 :(得分:0)
首先,我应该道歉,因为我没有涉及在htaccess中进行更改的解决方案。我的解决方案具有不同的性质。
我认为问题可以解决,如果你有一个配置变量,最好是在配置文件中,它将保存图像,js等的根文件夹。大多数时候它的public_html,文件根目录,其中的网址是你的网站指向。所以你的配置变量看起来像:
$base_url = 'http://www.mywebsite.com/';
配置文件应无条件地包含在index.php中。
因此,当您包含任何js或图像时,您可以这样做:
<script type="text/javascript" src="<?php echo $base_url;?>js/global.js" />
<img src="<?php echo $base_url;?>images/gradient_green.jpg" />
如果在index.php中包含配置文件,则根据switch-case条件包含的所有文件都可以使用$ base_url变量。
另一种可能的解决方案是使用基本标签。在这里查看:
http://www.w3schools.com/TAGS/tag_base.asp
我希望这会有所帮助。
答案 1 :(得分:0)
在页面上使用js,css和图像的绝对网址(以斜杠开头)。
/js/main.js而不是js / main.js
答案 2 :(得分:0)
除非你进行外部重定向(通过将[R]标志添加到RewriteRule中),否则不能使用.htaccess执行此操作。但是接下来你暴露了查询字符串,这是你想要首先避免的。
无法完成的原因:不是apps.php“认为它在/ apps /目录中” - 它是“认为”的浏览器。在apps.php生成的页面源中,您将相对URL发送回浏览器,现在浏览器将相对于要求的页面位置请求这些资源。对于浏览器,它获取的页面位于/ apps /中,无论您在服务器端内部应用了什么重写。
所以你有的选择是:
最后一个是恕我直言的唯一真实选择。