2010-11-13 72 views
0

我已经在网址中使用参数。现在我正在考虑为用户执行干净的网址以避免网址中的参数。我研究了.htaccess规则(mod重写),但我不明白的一件事是,我是否需要在所有地方更改网址,以便htaccess中的规则可以正常工作?我觉得这是比较单调乏味的,因为我需要找到这些地方并更改它以清除网址。例如,我有http://www.mysite.com/index.php?view=abouthttp://www.mysite.com/index.php?view=contact。我写规则为写入.htaccess规则

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

这工作得很好,如果我去,键入mystie.com/about.html或mysite.com/contact.html。但现在我需要在编码中找到位置,并将所有view = about或view = contact改为about.html或contact.html。在这种情况下,它可能很简单,因为它将只是我需要改变的标题..但如果有URL的视图= showdata?user = dsdsa & aga = 12 ...我无法找到所有这些地方提到并改变。任何简单的方法或聪明的方法?谢谢你的帮助。

回答

0

你将不得不重新设计你的代码。

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

既然你在运行PHP,你可以使用输出缓冲的OB功能:

  1. 缓冲区上启动
  2. 输出检索缓存的内容,并且清除它,一旦你呈现所有页面
  3. 应用正则表达式转换网址
  4. 写入修改后的缓冲输出流

您显然需要一组要在PHP脚本中映射的规则。对不起,我没有提供任何代码,但是基于我发现的其他代码,我在几年前做过。但方法很简单。

0

重写规则只会影响以.html结尾的URL。因此,直接连接到index.php的链接应保持正常工作。然而,那些丑陋的链接将被搜索引擎拾起并出现在结果页面中。

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

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

0

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

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

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

+0

谢谢。 ..我想了解如何在没有我编辑代码中的mysite.com/index.php?view=showdata&userddsda&id=33等所有url的情况下,htaccess中的规则如何工作。 – geej 2010-11-13 21:19:42