繁体   English   中英

.htaccess重定向子目录作为php中的查询字符串

[英].htaccess redirect subdirectory as query string in php

这很难解释,所以希望我对我的问题有所了解。

(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页面可以是相同的文件并产生相同的结果,而不是将apps.php文件视为/apps/目录?

首先,我应该道歉,因为我没有解决方案,其中涉及对htaccess进行更改。 我的解决方案具有不同的性质。

我认为,如果您有一个config变量(最好是在一个配置文件中)可以解决问题,该文件将保存图像,js等的根文件夹。大多数情况下,它的public_html,文档根目录,网站的URL指向至。 因此您的配置变量可能如下所示:

$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中,则根据切换情况,所包含的所有文件都将能够使用$ base_url变量。

另一种可能的解决方案是使用基本标签。 在这里查找:

http://www.w3schools.com/TAGS/tag_base.asp

我希望这有帮助。

对网页上的js,css和图片使用绝对网址(以斜杠开头)。

/js/main.js而不是js / main.js

除非进行外部重定向(通过将[R]标志添加到RewriteRule中),否则无法使用.htaccess进行操作。 但是随后您公开了查询字符串,这是您首先要避免的字符串。

无法完成的原因:不是apps.php认为它在/ apps /目录中,而是浏览器认为。 在apps.php生成的页面源中,您将相对URL发送回浏览器,现在浏览器将请求相对于其所请求页面位置的这些资源。 对于浏览器,无论您在服务器端内部进行了什么重写,它所获得的页面都位于/ apps /中。

因此,您有以下选择:

  • 使用.htaccess进行外部重定向(并破坏您的初衷;-)
  • 如您所说,在处理apps.php等的同时,用PHP动态更改URL(在URL前面加../)
  • 使用绝对URL,就像@nobody在他的答案中建议的那样。

最后一个是唯一的实物选项恕我直言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM