gpt4 book ai didi

apache - 使用 htaccess 从 URL 中删除字符

转载 作者:行者123 更新时间:2023-12-02 03:22:34 26 4
gpt4 key购买 nike

希望有人能看到我做错了什么,但这就是故事......

我当前的网站 URL 是由电子商务软件根据产品和类别名称自动生成的,因此,如果产品/类别名称包含非字母数字字符,则会在 URL 中进行编码,这很麻烦。例如:

mysite.com/Shop/Furniture-Set-Large-Table%2C-4-Chairs.html

我正在转向新的电子商务解决方案,该解决方案还会根据产品名称自动生成 URL,但足够聪明,可以删除所有非字母数字字符。它还会转换为小写,我已经设法找到了一个将大写重定向为小写的 htaccess 解决方案。它也没有 URL 的“商店”部分,我也设法通过 htaccess 解决了这个问题。例如:

mysite.com/furniture-set-large-table-4-chairs.html

要删除“商店”部分:

RedirectMatch 301 ^/Shop/(.*)$ http://www.mysite.com/$1

将大写字母替换为小写字母以防止 404 错误:

RewriteCond %{REQUEST_URI} [A-Z]
RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$
RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L]

这两者都可以完美地工作。

所以我需要一个或多个 htaccess 规则来从 URL 中删除这些编码字符。我不需要替换它们,只需删除它们,因为软件将 URL 创建为“Table%2C-4-Chairs” - 因此只有 %2C 需要删除。

我需要从 URL 中删除某些字符编码,例如:

逗号 (%2C)、撇号 (%27)、冒号 (%3A) 等

任何人都可以为此建议合适的 htaccess 规则吗?

提前致谢。

最佳答案

URI 在通过重写引擎发送之前会进行 url 解码,因此您需要匹配实际字符而不是其编码的对应字符:

RewriteRule ^(.*),(.*)$ /$1$2 [L]
RewriteRule ^(.*):(.*)$ /$1$2 [L]
RewriteRule ^(.*)\'(.*)$ /$1$2 [L]
RewriteRule ^(.*)\"(.*)$ /$1$2 [L]
# etc...

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301]

重定向状态让 mod rewrite 知道,如果应用了上述任何规则(从而使内部重定向状态值 = 200),那么我们需要重定向,但在清除之前我们不会到达规则的该部分所有特殊字符检查。

您希望这些规则都在任何重定向之前,以便规则可以循环并删除任何这些字符的多个实例。然后,一旦不再有特殊字符,重写引擎就会逐渐到达您的重定向所在的位置。

我建议您删除 mod_alias RedirectMatch 指令并将其替换为重写规则。有时,组合这两个模块并让它们都影响单个 URI 可能会导致意外结果。因此,在执行上述所有规则之前,您需要:

RewriteRule ^Shop/(.*)$ /$1 [L]

添加删除特殊字符链中的/Shop/。那么你的最后一条规则将如下:

RewriteCond %{REQUEST_URI} [A-Z]
RewriteCond %{REQUEST_FILENAME} !\.(?:png|gif|ico|swf|jpg|jpeg|js|css|php|pdf)$
RewriteRule (.*) ${lc:http://www.mysite.com/$1} [R=301,L]

关于apache - 使用 htaccess 从 URL 中删除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13818776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com