【问题标题】:htaccess - Rewrite to capture friendly URL or querystringhtaccess - 重写以捕获友好的 URL 或查询字符串
【发布时间】:2011-09-22 01:31:54
【问题描述】:

我正在尝试提出一个或多个重写规则,这些规则将采用友好的 url 或包含完整查询字符串的 url。
计划是通过使用 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]

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

【问题讨论】:

    标签: mod-rewrite


    【解决方案1】:

    我建议将控制权交给 PHP - 我不久前写了一篇关于此的文章 - http://tomsbigbox.com/elegant-url-rewriting/ - 它详细说明了如何将查询字符串发送到 PHP 文件,然后决定做什么 - 所以如果页面存在例如它将加载它,否则执行其他操作。

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

    【讨论】:

    • 谢谢汤姆。我希望在我开始我的网站时看到你的文章!我的 htaccess 文件中有很多东西,所以我需要在 PHP 中重新做任何事情,或者我可以将您的解决方案用于我正在处理的纯文本问题吗?
    • 这取决于您在 htaccess 文件中的内容,如果您以不同方式为不同页面操作查询字符串,则需要将这些规则包装在 例如。
    【解决方案2】:

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

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

    然后稍微修改您的输入 URL,使其如下所示:

    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 编写特殊逻辑。

    【讨论】:

    • 谢谢迈克尔。我不确定我是否能够修改输入网址,因为有些网址的深度超过 2 级,并带有许多参数。理想情况下,我需要找到可以处理友好 url 和查询字符串的东西……如果可能的话?
    • 在您的情况下,我会为您的所有 URL 使用 $_SERVER['QUERY_STRING'],然后依靠 PHP 进行处理。 @Tom Walter 的回答可能是您的最佳选择。
    【解决方案3】:

    在 Tom 和 Michael 的指导下,我的想法如下:

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

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

    然后在 PHP 中:

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

    似乎适用于友好的网址(到目前为止已深入测试 2 级)和查询字符串。 希望没问题,所以我会用这个作为解决方案:)

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多