Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 如何为大型网站实现url页面重定向_Apache_.htaccess_Url_Redirect - Fatal编程技术网

Apache 如何为大型网站实现url页面重定向

Apache 如何为大型网站实现url页面重定向,apache,.htaccess,url,redirect,Apache,.htaccess,Url,Redirect,我的网站如carparts.co.uk有355000个独特的URL。(这是一个汽车零件目录网站)(在网站管理员工具上显示,其中174000个已编入索引) 我们想将我们的网站移动到一个新的购物车平台(prestashop),并完全改变了目录的结构,这意味着我们现在有了一组新的URL。(尽管主域名没有改变,仍然是carparts.co.uk) 我现在有一个excel表格,其中有一列355000个“旧”url,与新目录中最接近的等效url相匹配。 e、 g (有355000个类似的重定向) 我的问题是

我的网站如carparts.co.uk有355000个独特的URL。(这是一个汽车零件目录网站)(在网站管理员工具上显示,其中174000个已编入索引)

我们想将我们的网站移动到一个新的购物车平台(prestashop),并完全改变了目录的结构,这意味着我们现在有了一组新的URL。(尽管主域名没有改变,仍然是carparts.co.uk) 我现在有一个excel表格,其中有一列355000个“旧”url,与新目录中最接近的等效url相匹配。 e、 g

(有355000个类似的重定向)

我的问题是我应该怎么做? 我知道你可以使用htaccess来做这件事,但我很担心,因为我读到htaccess会减慢网站的速度,如果它非常大的话(这种慢是只有在尝试访问一个旧的URL时才会遇到的吗?),还是会影响我所有URL的速度


那么,对于我来说,处理如此大量的URL最好的办法是什么呢?

您最好的办法可能是设置一个重写映射。这需要服务器vhost config访问权限,因为您无法从htaccess文件配置映射(尽管您可以使用一个)。映射由apache缓存,因此您无需担心不断的文件访问

简单地说:

RewriteMap redirects txt:/full/path/to/redirect-map.txt
然后,在文件
redirect map.txt
中只会有一个“from”和“to”:

然后在htaccess文件或vhost配置中,只需执行以下操作:

RewriteCond $(redirects:$1|0) !=0
RewriteRule ^(.*)$ $(redirects:$1) [L,R]

使用htaccess会减慢网站的运行速度,因为它需要为每个请求检查多个文件,并且会为每个请求动态检查这些文件

对于路由较深的站点而言,这更是一个问题。例如,请求:

www.example.com/folder1/folder2/folder3/folder4/index.htm
需要检查一下

  • 主配置文件
  • 然后在文档根目录中添加任何覆盖 htaccess文件
  • 然后在folder1 htaccess文件中添加任何覆盖
  • 然后在folder2 htaccess文件中添加任何覆盖
……等等

然而,如果你没有深度嵌套,那就没那么糟糕了。仍然比不使用它们慢,但在大多数网站上可能不明显

在这里,htaccess对您的好处是,您不需要将所有重定向放在一个位置,并且可以将它们分割到htaccess文件中。我不确定向主Apache配置添加355000个重定向会有什么影响,但这是一个相当大的数字,所以请想象一下,这可能会对性能产生影响。htaccess文件位于oth上呃,在发出请求时动态读取,因此不需要将所有重定向加载到Apache中


因此,这可能是htaccess可能是更好解决方案的少数几个用例之一,即使您可以访问主配置文件。

它会影响我所有URL的速度吗?
是的,使用.htaccess会降低整个站点的速度,因为它必须在每个页面请求上读取.htaccess文件。如果您访问服务器配置,最好将它们放在那里,这样可以降低性能损失。这是一个很好的解决方案,但如果OP有权访问,我仍然建议使用config vs.htaccess。
RewriteCond $(redirects:$1|0) !=0
RewriteRule ^(.*)$ $(redirects:$1) [L,R]
www.example.com/folder1/folder2/folder3/folder4/index.htm