单个页面的 htaccess 重定向不起作用



我的.htaccess文件有重定向和重写代码。除了一页之外,一切正常。我需要重定向 https://example.com/shopping/ceylon-cinnamon-c-62.html 并 http://example.com/shopping/index.php?cPath=62 https://example.com/ceylon-cinnamon-c-2_19.html 我已经尝试了下面"这些工作都不起作用"下的四行(一次一个(,但重定向永远不会起作用。结果网址为 https://example.com/c-62.html。任何人都可以指出问题或如何测试它吗?

Options +FollowSymLinks -Indexes
RewriteEngine On 
RewriteBase /
# NONE OF THESE WORK
Redirect 301 /shopping/ceylon-cinnamon-c-62.html https://example.com/index.php?cPath=2_19
Redirect 301 /shopping/index.php?cPath=62 https://example.com/index.php?cPath=2_19
RewriteRule ^(.*?)shopping/ceylon-cinnamon-c-62.html$ https://example.com/index.php?cPath=2_19 [R=301,L,NC] 
RewriteRule ^(.*?)shopping/index.php?cPath=62$ https://example.com/index.php?cPath=2_19 [R=301,L,NC] 
# THESE ALL WORK 
RewriteRule ^shopping/(.*)$ /$1 [R=301,NC,L]
#redirect index.php to root
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ https://example.com/ [R=301,L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}

你的问题有点模糊...您给出的示例规则("这些都不起作用"(与您在问题中提出的内容无关。重写尝试的声称结果肯定不是您的尝试所实现的。因此,要么您的描述不正确(也许是从内存中编写的?(,要么您有其他一些您没有告诉我们的因素(某些应用程序逻辑可能实现了自己的重定向?...

无论如何,以下是实现您询问的确切重定向的简单规则,独立于任何其他内容:

RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)cPath=62(?:&|$)
RewriteRule ^/?shopping/index.php$ /ceylon-cinnamon-c-2_19.html [R=301]
RewriteRule ^/?shopping/ceylon-cinnamon-c-62.html$ /ceylon-cinnamon-c-2_19.html [R=301]

最好从302 临时重定向开始,然后在确定一切设置正确后将其更改为 301 永久重定向。这可以防止在尝试时出现缓存问题......

也就是说:在测试时,请确保 tripple 确保您没有查看缓存的结果。测试时始终使用全新的匿名鼠标浏览器窗口,进行深度重新加载,而不仅仅是重新加载并观察浏览器网络控制台以获取您收到的实际响应......

此实现同样适用于 http 服务器主机配置或动态配置文件(".htaccess"文件(。显然,重写模块需要加载到 http 服务器内部并在 http 主机中启用。如果您使用动态配置文件,则需要注意在主机配置中完全启用其解释,并且它位于主机的DOCUMENT_ROOT文件夹中。

一般评论:您应该始终倾向于将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(".htaccess"(。这些动态配置文件增加了复杂性,通常是意外行为的原因,难以调试,并且它们确实会减慢 http 服务器的速度。它们仅作为最后选项提供,用于您无法访问真正的http服务器主机配置(阅读:非常便宜的服务提供商(或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦(。

最新更新