我正在尝试提出一个或多个重写规则,这些规则将采用友好的网址或包含完整查询字符串的网址。
计划是通过使用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]
他们独立工作但不在一起工作。有人可以帮忙吗?
答案 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编写特殊逻辑,而不是最后一个。