.htaccess配置到多个参数和文件重定向

时间:2013-06-10 13:24:04

标签: php .htaccess

我有这个简单的.htaccess文件RewriteRule ^([0-9a-zA-Z:_-]+)/?$ index.php?page=$1,所以我可以http://mywebsite.com/stuff,而且东西变成了GET variable。我想扩展它的功能,使它像index.php?page=$2&page2=$3...无限期一样,因为像http://mywebsite.com/stuff/is/cool这样的东西仍然有用。

另一个问题是,当我输入URL http://mywebsite.com/stuff/时,HTML似乎认为它位于stuff文件夹中,因此它不会加载文件(css,图像等)。 ),如何解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用PHP处理网址 例如,让我们说你的脚本条目将是index.php 在这个文件只是处理这样的网址

$pages = $_GET['page'];
$extracted_p = explode ("/",$pages);
//and foreach extracted pages to decide what you want with it

第二部分,你需要设置基本url变量并放入html基本标记 在脚本的最头部

$base_url = "http://localhost/myscript/";

in html

<base href="<?php echo $base_url?>" />

这就是

答案 1 :(得分:1)

你的事情太复杂了。只需将其放入.htaccess

即可
FallbackResource index.php

它将确保所有未指向现有文件的请求都将由根文件夹中的index.php处理。然后在该文件中执行:

$path = explode('/', trim($_SERVER['REQUEST_URI'], '/'));

并轻松解析$path,例如:

if(!count($path))
  RenderHomepage();
elseif($path[0] == 'blog')
  RenderBlog();
else
{
  header('HTTP/1.1 404 Not Found');
  die('This page does not exist');
}

至于你的另一个问题,从浏览器的角度来看这是合乎逻辑的 - 它没有看到你的内部结构,所以它只是根据它可以看到的URL来做文件夹逻辑。这就是您必须永远不要使用相对路径的原因,只需将您的资产指定为基于根目录的/static/mystyles.css,并且它们将始终正常解析。