我尝试了几件事情,我的重定向,但没有有效的解决方案。
我有两个域名指向同一文件夹/网站(多家商店前的商店),我想重定向一些网页从第一个领域在一个特定的网页和保持域名。
我的工作:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain1.local$ [NC]
RewriteRule ^/fr/blog/inspirations-c4$ https://domain1.local/fr/journal [R=301,L]
RewriteRule ^/fr/blog/inspirations-c3$ https://domain1.local/fr/journal [R=301,L]
RewriteCond %{HTTP_HOST} ^domain2.local$ [NC]
RewriteRule ^/fr/blog/inspirations-c4$ https://domain2.local/fr/test [R=301,L]
RewriteRule ^/fr/blog/inspirations-c3$ https://domain2.local/fr/test [R=301,L]但是我不能用简单的重定向301来实现这一点,因为我不能从请求URI中指定域。因为目标页面根据域的不同而不同。
对不起,我的英语,并感谢您的帮助。
发布于 2020-03-18 12:34:43
除了@DusanBajic在他对您的问题的评论中解释的内容之外,您还需要考虑在重写规则时绝对和相对路径之间的区别。这实际上是明确记录的..。
在分布式配置文件(".htaccess")中实现的.htaccess规则模式与请求的URL的相对路径相匹配。然而,您尝试将其与绝对路径相匹配,而绝对路径永远不会匹配。因此,要么更改模式以使用相对路径,要么最好实现重写规则,使它们在这两种情况下都能工作。因此,当规则在真正的http服务器主机配置中实现时,模式与请求的URL中的绝对路径相匹配。这在一开始似乎令人困惑。但一旦你想一想,这是完全有意义的。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain1\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c4$ https://domain1.local/fr/journal [R=301,L]
RewriteCond %{HTTP_HOST} ^domain1\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c3$ https://domain1.local/fr/journal [R=301,L]
RewriteCond %{HTTP_HOST} ^domain2\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c4$ https://domain2.local/fr/test [R=301,L]
RewriteCond %{HTTP_HOST} ^domain2\.local$ [NC]
RewriteRule ^/?fr/blog/inspirations-c3$ https://domain2.local/fr/test [R=301,L]这是一个好主意,从302临时重定向,并只改变到301永久重定向后,一旦你确定一切是正确的设置。这样可以防止在尝试时出现缓存问题。
此实现将在http服务器主机配置或分布式配置文件(".htaccess“文件)中同样工作。显然,重写模块需要加载在http服务器中,并在http主机中启用。如果使用分布式配置文件,则需要注意主机配置中完全启用了它的解释,并且它位于主机的DOCUMENT_ROOT文件夹中。
请注意:与使用分布式配置文件(".htaccess")相比,您应该始终倾向于将此类规则放置在http服务器主机配置中。这些分布式配置文件增加了复杂性,常常是意外行为的一个原因,很难调试,而且它们确实减慢了http服务器的运行速度。它们仅作为最后一种选择,用于您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供者)或坚持编写自己的规则的应用程序(这显然是一场安全噩梦)。
https://stackoverflow.com/questions/60738103
复制相似问题