Gra*_*t G 6 apache .htaccess redirect character strip
希望有人能看出我做错了什么,但这是故事......
我的当前网站网址是由电子商务软件从产品和类别名称自动生成的,因此,如果产品/类别名称包含非字母数字字符,则会在URL中编码,这很痛苦.例如:
mysite.com/Shop/Furniture-Set-Large-Table%2C-4-Chairs.html
Run Code Online (Sandbox Code Playgroud)
我正在转向新的电子商务解决方案,该解决方案还从产品名称自动生成URL,但是足够聪明,可以删除所有非字母数字字符.它也转换为小写,我已经设法找到一个htaccess解决方案,用于将大写重定向到小写.它也没有URL的"Shop"部分,我也通过htaccess设法解决了这个问题.例如:
mysite.com/furniture-set-large-table-4-chairs.html
Run Code Online (Sandbox Code Playgroud)
要删除"商店"部分:
RedirectMatch 301 ^/Shop/(.*)$ http://www.mysite.com/$1
Run Code Online (Sandbox Code Playgroud)
要用小写替换大写以防止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]
Run Code Online (Sandbox Code Playgroud)
这两者都很完美.
所以我需要一个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]
Run Code Online (Sandbox Code Playgroud)
重定向状态让 mod rewrite 知道,如果应用了上述任何规则(从而使内部重定向状态值 = 200),那么我们需要重定向,但在清除所有规则之前,我们不会到达该部分规则。特殊字符检查。
您希望这些规则全部出现在任何重定向之前,以便规则可以循环并删除任何这些字符的多个实例。然后,一旦不再有特殊字符,重写引擎就会逐渐到达重定向所在的位置。
我建议您删除 mod_aliasRedirectMatch指令并用重写规则替换它。有时,组合这两个模块并让它们都影响单个 URI 可能会导致意外结果。因此,在执行上述所有规则之前,您需要:
RewriteRule ^Shop/(.*)$ /$1 [L]
Run Code Online (Sandbox Code Playgroud)
添加删除/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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9200 次 |
| 最近记录: |