.htaccess 在Wordpress/Woocommerce中重写GET颜色变化变量

00jrzges  于 2022-11-16  发布在  WordPress
关注(0)|答案(1)|浏览(109)

我尝试了所有我能在StackOverflow上找到的解决方案,但仍然无法使它工作。所以,我最后的希望是直接问这个问题。
所以,我有一个WordPress/woocommerce商店,里面有各种颜色的产品。你可能知道,你可以用GET变量访问特定的变体。例如:
https://example.com/shop/mens-shoes/derby-shoes/trickers-wiltshire-leather-derby-shoes/?attribute_pa_product-color=chestnut-burnished
当然,“栗色光泽”是一种动态价值,因为还有很多其他颜色。
我想做的是能够通过输入以下URL访问此变体:
https://example.com/shop/mens-shoes/derby-shoes/trickers-wiltshire-leather-derby-shoes/chestnut-burnished/
我已经尝试了很多重写规则,但似乎没有工作。如果我输入上面的网址,我总是得到一个404页,而不是单一的产品颜色变化之一。
我想这和现有的WordPress规则有关,它在root .htaccess中,可以创建漂亮的链接。下面是我拥有的完整的.htaccess文件:

User-agent: Yandex
Disallow: /

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^summer\-sale/ /mens-shoes-sale/? [R=301,L]
RewriteRule ^summer\-sale /mens-shoes-sale/? [R=301,L]
RewriteRule ^blog/shoes/10\-most\-popular\-mens\-classic\-shoes/$ /blog/mens\-shoes/10\-most\-popular\-mens\-classic\-shoes/? [L,R=301]
RewriteRule ^blog/shoes/how\-to\-care\-for\-your\-leather\-shoes/$ /blog/mens\-shoes/how\-to\-care\-for\-your\-leather\-shoes/? [L,R=301]
RewriteRule ^blog/shoes/6\-classic\-shoes\-every\-man\-should\-own/$ /blog/mens\-shoes/6\-classic\-shoes\-every\-man\-should\-own/? [L,R=301]
RewriteRule ^blog/shoes/how\-to\-choose\-the\-right\-black\-tie\-tuxedo\-shoes/$ /blog/mens\-shoes/how\-to\-choose\-the\-right\-black\-tie\-tuxedo\-shoes/? [L,R=301]
RewriteRule ^blog/shoes/5\-british\-made\-shoes\-worn\-by\-movie\-characters/$ /blog/mens\-shoes/5\-british\-made\-shoes\-worn\-by\-movie\-characters/? [L,R=301]
RewriteRule ^blog/shoes/6\-most\-popular\-mens\-brogue\-shoe\-styles/$ /blog/mens\-shoes/6\-most\-popular\-mens\-brogue\-shoe\-styles/? [L,R=301]
RewriteRule ^blog/shoes/5\-benefits\-of\-a\-goodyear\-welted\-shoes/$ /blog/mens\-shoes/5\-benefits\-of\-a\-goodyear\-welted\-shoes/? [L,R=301]
RewriteRule ^mens-shoes/loake/?$ /mens-shoes/?brand=loake&orderby=menu_order [NC,L,QSA]
RewriteRule ^mens-shoes/carlos-santos/?$ /mens-shoes/?brand=carlos-santos&orderby=menu_order [NC,L,QSA]
RewriteRule ^mens-shoes/trickers/?$ /mens-shoes/?brand=trickers&orderby=menu_order [NC,L,QSA]
RewriteCond %{QUERY_STRING} ^post_type\=product&p\=5979$
RewriteRule ^$ /shoe-care/brushes/? [R=301,L]
RewriteRule ^/?shop/mens-shoes/derby-shoes/trickers-wiltshire-leather-derby-shoes/([^/]+)/?$ /shop/mens-shoes/derby-shoes/trickers-wiltshire-leather-derby-shoes/?attribute_pa_product-color=$1 [QSA,L]

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_URI} ^/?wp\-content/+debug\.log$
        RewriteRule .* - [F,L,NC]
</IfModule>
<IfModule !mod_rewrite.c>
    <Files "debug.log">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
    </Files>
</IfModule>
# BEGIN LSCACHE
# END LSCACHE
# BEGIN NON_LSCACHE
# END NON_LSCACHE

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

你能帮我吗?

kpbwa7wx

kpbwa7wx1#

在顶层实现时,这将是必需的重写规则:

RewriteRule ^/?shop/mens-shoes/derby-shoes/trickers-wiltshire-leather-derby-shoes/([^/]+)/?$ /shop/mens-shoes/derby-shoes/trickers-wiltshire-leather-derby-shoes/?attribute_pa_product-color=$1 [QSA,L]

您应该更愿意在实际的http服务器的主机配置中实现这样的规则。您使用的是廉价的主机提供商),那么您可以在一个 distributed 配置文件中实现它,通常称为“.htaccess”。该文件必须放在您的http主机的根文件夹中(DOCUMENT_ROOT)。
很可能已经有这样一个包含规则的文件,所以你需要集成这个文件。记住,处理这些规则的顺序是从上到下的,而且顺序是相关的。通常你必须在框架生成的通用规则之上实现这样一个例外规则。
也可以在文件夹层次结构中更低的位置实现这样的规则。但这取决于您没有与我们共享的实际设置。
此外,您可能希望实现一个更通用的规则,应用于多个产品,而不仅仅是一个特定的产品。问题中没有足够的信息来给予直接的答案。
你在信中说你已经尝试了所有现有的答案,我想你也阅读了apache重写模块的文档,因为它提供了很好的解释和很好的例子。
既然你没能把事情做好,很可能是因为你对问题的理解有偏差,但由于问题中缺乏详细的信息,这只是一个猜测。

相关问题