htaccess - 重写以捕获友好的URL或查询字符串

时间:2011-06-24 13:51:25

标签: mod-rewrite

我正在尝试提出一个或多个重写规则,这些规则将采用友好的网址或包含完整查询字符串的网址。
计划是通过使用PHP的loadHTML读取URL来创建纯文本页面。

例如:

输入

1. http://www.example.com/disclaimer (http://www.example.com/text/disclaimer on text-only version)
2. http://www.example.com/info/aboutus (http://www.example.com/text/info/aboutus on text-only version)
3. http://www.example.com/news?id=123 (http://www.example.com/text/news?id=123 on text-only version)

输出

1. http://www.example.com/includes/textonly.php?page=disclaimer
2. http://www.example.com/includes/textonly.php?page=info/aboutus
3. http://www.example.com/includes/textonly.php?news?id=123

所以在textonly.php上我会使用$ _GET ['page']);例如1)和2),并使用$ _SERVER ['QUERY_STRING'];例如3)。

例如1)和2),我想出了:

RewriteRule ^text/(.*) includes/textonly.php?page=$1

例如3),我想出了:

RewriteRule ^text/(.[?]) /includes/textonly.php [QSA]

他们独立工作但不在一起工作。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

在汤姆和迈克尔的指导下,这就是我的想法:

Htaccess中的

在查询字符串中将所有内容发送给PHP:

RewriteRule ^text/(.*) /includes/textonly.php [QSA,L]

然后在PHP中:

$page = 'http://'.$_SERVER['HTTP_HOST'].'/'.str_replace('/text/','',$_SERVER['REQUEST_URI']);

似乎适用于友好网址(目前为止已测试过2级)和查询字符串。 希望它没关系,所以我将把它作为解决方案:)

答案 1 :(得分:0)

我建议把控制交给PHP - 我前段时间写了一篇文章 - http://tomsbigbox.com/elegant-url-rewriting/ - 它详细说明了如何将查询字符串发送到PHP文件然后决定做什么 - 所以如果页面例如,它会加载它,否则做其他事情。

我发现这是URL重写的最佳解决方案。

答案 2 :(得分:0)

我会将您的重写规则更改为:

RewriteRule ^([^/\.]+)/?([^/\.]+)?/?$ /includes/textonly.php?page=$1&id=$2 [L,NC]

然后稍微修改您的输入网址,如下所示:

1. http://www.example.com/disclaimer
2. http://www.example.com/info/aboutus
3. http://www.example.com/news/123

他们会指出这些网址:

1. http://www.example.com/includes/textonly.php?page=disclaimer&id=
2. http://www.example.com/includes/textonly.php?page=info&id=aboutus
3. http://www.example.com/includes/textonly.php?page=news&id=123

上面的正则表达式将匹配/之间的任何内容,不包括/.。下半部分是可选的,因此在该规则中,您只能深入两个目录。

以相同的方式控制所有三个URL将使您的逻辑在textonly.php页面上更清晰,因为您不需要为前两个URL编写特殊逻辑,而不是最后一个。