写.htaccess规则

时间:2010-11-13 20:12:44

标签: php .htaccess

我已经在网址中包含参数的网站。现在我想为用户做干净的网址,以避免网址中的参数。我研究了.htaccess规则(mod重写),但我不明白的一件事是,我是否需要在所有地方更改网址,以便htaccess中的规则能够正常工作?我觉得这更乏味,因为我需要找到这些地方并将其更改为清除网址。例如,我有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。在这种情况下,它可能很简单,因为它只是我需要更改的标题..但如果有url的像view = showdata?user = dsdsa& aga = 12 ...我找不到提到这一点的所有地方并改变。任何简单的方法或聪明的方法?谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

您必须重新设计代码。

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

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

  1. 启动时缓冲输出
  2. 检索缓冲区内容,并在呈现所有页面后清除它
  3. 应用正则表达式转换网址
  4. 将修改后的缓冲区写入输出流
  5. 您显然需要在PHP脚本中映射一组规则。很抱歉没有为您提供代码,但我在几年前做过,基于我找到的其他代码。但这种方法很简单。

答案 1 :(得分:0)

重写规则只会影响以.html结尾的网址。因此,您直接指向index.php的链接应保持完整。但是,这些丑陋的链接会被搜索引擎选中并显示在结果页面中。

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

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

答案 2 :(得分:0)

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

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

当然,您可以逐步更改代码,以便使用真实的网址,以避免混淆。