.htaccess redirect子目录作为php中的查询字符串

时间:2011-06-25 07:06:43

标签: php apache

这很难解释,所以希望我能在我的问题中理解。

(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.phpapps.php页面可以是相同的文件并生成相同的结果,而不是{{1文件被视为处于apps.php目录中?

3 个答案:

答案 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 /中,无论您在服务器端内部应用了什么重写。

所以你有的选择是:

  • 使用.htaccess进行外部重定向(并破坏原来的目的; - )
  • 在处理apps.php等时,使用PHP动态更改URL,正如您所说的那样(前缀为./到URL)
  • 使用绝对网址,就像@nobody在回答中建议的那样。

最后一个是恕我直言的唯一真实选择。