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

Mod rewrite htaccess-重写以捕获友好URL或查询字符串,mod-rewrite,Mod Rewrite,我正在尝试提出一个或多个重写规则,这些规则将采用友好url或包含完整查询字符串的url。 计划是通过使用PHP的loadHTML读取URL来创建一个纯文本页面 例如: 输入 输出 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/incl

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

例如:

输入

输出

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
RewriteRule ^text/(.[?]) /includes/textonly.php [QSA]
例如3),我想到:

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

他们独立工作,但不是一起工作。有人能帮忙吗?

我建议将控制权交给PHP—我不久前写了一篇关于这方面的文章—它详细介绍了如何将查询字符串发送到PHP文件,然后决定执行什么操作—因此,如果页面存在,例如,它将加载它,否则将执行其他操作


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

我将更改您的重写规则,如下所示:

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
然后稍微修改输入URL,如下所示:

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
他们会指向这些URL:

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相比,您不需要为前两个URL编写特殊的逻辑。

在Tom和Michael的指导下,我得出了以下结论:

RewriteRule ^text/(.*) includes/textonly.php?page=$1
RewriteRule ^text/(.[?]) /includes/textonly.php [QSA]
在Htaccess中,在querystring中将所有内容发送到PHP:

RewriteRule ^text/(.*) /includes/textonly.php [QSA,L]
然后在PHP中:

$page = 'http://'.$_SERVER['HTTP_HOST'].'/'.str_replace('/text/','',$_SERVER['REQUEST_URI']);
似乎对友好的URL(到目前为止测试了2个级别)和查询字符串都有效。
希望没问题,所以我会用这个作为解决方案:)

谢谢汤姆。我真希望在我创建网站时看到你的文章!我的htaccess文件中有很多内容,所以我是否需要在PHP中重新执行所有操作,或者我是否可以将您的解决方案用于我正在处理的纯文本问题?这取决于htaccess文件中的内容,如果您以不同的方式为不同的页面操作查询字符串,例如,你需要将这些规则包装起来。谢谢Michael。我不确定我是否能够修改输入URL,因为有些URL的深度超过了2级,有许多参数。理想情况下,我需要找到一些可以处理友好URL和查询字符串的东西。。。如果这是可能的?在您的情况下,我会使用
$\u SERVER['QUERY\u STRING']
来处理您的所有URL,然后依靠PHP进行处理@汤姆·沃尔特的答案可能是你最好的选择。