Laravel 奇怪编码的重定向 Space

Laravel Redirect for Weird Encoded Space

我们的网站似乎有一些奇怪的损坏的传入链接,我们想重定向这些链接。我们在 Apache 上使用 Laravel。


这里是传入url:/flannel-sheets%C2%A0

这里是我们要发送的地方:/flannel-sheets


%C2%A0 似乎解码到一个奇怪的 space.

我已经在 web.php 文件中尝试了这些行

$this->get( 'flannel-sheets%C2%A0', function() { return redirect( '/flannel-sheets' ); });
$this->get('flannel-sheets ', function() { return redirect( '/flannel-sheets' ); });
$this->get('flannel-sheets$nbsp;', function() { return redirect( '/flannel-sheets' ); });

我还尝试在 000-default.config.htaccess 文件中使用 Apache 重定向

Redirect 301 /flannel-sheets%C2%A0 https://example.com/flannel-sheets

这些方法都不适合我。我该怎么办?

所以它是一个non-breakingspace(0xC2 0xA0) 一旦它们在野外处理它们就很烦人,就是糟糕的入站链接。

使用 mod_rewrite 可能是这里的最佳选择。像这样的东西会起作用...

RewriteRule ^(.+)\xc2\xa0$  [L,NE]

您需要检查这些字符,而不是它们的 URL 编码。我想知道 mod_speling 是否为这种情况提供了任何有用的东西......到目前为止还没有看到任何东西。

您可以使用以下方法修复它:

# remove spaces from start or after /
RewriteRule ^(.*/|)[\s%20]+(.+)$  [L]

# remove spaces from end or before /
RewriteRule ^(.+?)[\s%20]+(/.*|)$  [L]

# replace spaces by - in between
RewriteRule ^([^\s%20]*)(?:\s|%20)+(.*)$ - [L,R]

或者您可以动态接收损坏的路线

$this->get( '/{route}', function($route) { 
//filter $route the way you need
 ); });