两个重写规则之间的差异

时间:2016-09-16 13:45:17

标签: .htaccess

很简单,有人可以告诉我以下之间的区别请:

RewriteRule ^sitemap/.*$ /appindex.php [L]
RewriteRule ^sitemap/?$ /appindex.php [L]

1 个答案:

答案 0 :(得分:3)

这是关于正则表达式表示法的问题。它与重写规则本身的逻辑几乎没有关系。请注意,正则表达式有很好的介绍。您还想使用其中一个在线正则表达式实用程序来试验模式...

RewriteRule ^sitemap/.*$ /appindex.php [L]

这个匹配所有对以文字字符串sitemap开头的URL的请求,后跟一个斜杠和一些更多但是任意的字符。

这方面的例子是:

  • sitemap/index.xml
  • sitemap/folder/sitemap.xml
RewriteRule ^sitemap/?$ /appindex.php [L]

这个匹配所有对以文字字符串sitemap开头的URL的请求,可能后跟斜杠,仅此而已。

唯一匹配的例子显然是:

  • sitemap
  • sitemap/

请注意,此类规则考虑http get参数,这些在此级别无关紧要,因为它们不是URL本身的一部分,而是参数。所以以下匹配:

  • sitemap?id=test

请注意,两个规则仅在.htaccess样式文件中使用时才有意义。他们在真正的http服务器主机配置中工作。这是因为真实配置适用于绝对路径,而.htaccess样式文件适用于相对路径,因此路径没有前导斜杠(/sitemap/...sitemap/...)。通常,总是更喜欢在实际主机配置中放置重写规则。 .htaccess样式文件非常容易出错,难以调试,而且它们确实减慢了服务器速度,通常一无所获。它们仅针对两种情况提供:无法访问主机配置的人(阅读:非常便宜的托管提供商)和需要动态更新自己配置的应用程序(这是一个安全噩梦,所以请三思而后行)。