【问题标题】:writing .htaccess rules编写 .htaccess 规则
【发布时间】:2010-11-14 05:15:09
【问题描述】:

我已经在网址中有带有参数的网站。现在我正在考虑为用户做干净的 url 以避免 url 中的参数。我研究了 .htaccess 规则(mod rewrite),但我不明白的一件事是,我是否需要在所有地方更改 url,以便 htaccess 中的规则起作用?我觉得这更乏味,因为我需要找到这些地方并将其更改为清除 url。例如,我有http://www.mysite.com/index.php?view=abouthttp://www.mysite.com/index.php?view=contact。我把规则写成

RewriteEngine On
RewriteRule ^([^/]*)\.html$ /?view=$1 [L]

如果我输入 mystie.com/about.html 或 mysite.com/contact.html,这可以正常工作。但问题是现在我需要在编码中找到位置并将所有 view=about 或 view=contact 更改为 about.html 或 contact.html。在这种情况下,它可能很简单,因为它只是我需要更改的标题..但是如果有像 view=showdata?user=dsdsa&aga=12 这样的 url ......我找不到所有提到这个的地方并改变.任何简单的方法或聪明的方法?感谢您的帮助。

【问题讨论】:

    标签: php .htaccess


    【解决方案1】:

    你必须重新设计你的代码。

    但是,有机会以编程方式进行重新映射以性能为代价

    由于你是在PHP上运行的,你可以使用输出缓冲的ob函数来:

    1. 启动时缓冲输出
    2. 在渲染所有页面后检索缓冲区内容并清除它
    3. 应用正则表达式转换 URL
    4. 将修改后的缓冲区写入输出流

    您显然需要在 PHP 脚本中映射一组规则。很抱歉没有为您提供代码,但我在几年前就根据我找到的其他代码做到了。但方法很简单。

    【讨论】:

      【解决方案2】:

      重写规则只会影响以.html 结尾的网址。因此,您直接指向index.php 的链接应该仍然可以正常工作。但是,那些丑陋的链接会被搜索引擎拾取并出现在结果页面中。

      根据您当前的重写规则,包含 user=dsdsa 等参数的 URL 不能被重写为干净的 URL(例如/showdata.html?user=dsdsa)。这是因为如果您在重写规则的替换子字符串中包含查询字符串,Apache 将 删除 其他参数。您可以使用[QSA] 标志来避免这种情况。详情请见Apache documentation

      我不能说如何在 PHP 代码中找到所有丑陋的链接。您可能不得不求助于查看view= 存在的每个位置并手动更新它。

      【讨论】:

        【解决方案3】:

        如果我理解您的问题,您是在询问是否需要更改代码中的所有硬编码 URL。

        在这种情况下的答案是否定的,您不需要更改 URL,在更改 URL 时使用mod_rewrite 的优点是旧 URL 保持活动状态。如果您直接在浏览器中键入 URL,则不介意,如果您单击页面中的链接,它们会生成相同的 HTTP 请求(引用者除外)。

        当然,您可以逐渐更改您的代码,使其使用真实的 URL,以避免混淆。

        【讨论】:

        • 谢谢。 ..我试图了解 htaccess 中的规则将如何工作,而无需我编辑代码中的所有 URL,例如 mysite.com/index.php?view=showdata&userddsda&id=33。
        猜你喜欢
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        相关资源
        最近更新 更多