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
); });
我们的网站似乎有一些奇怪的损坏的传入链接,我们想重定向这些链接。我们在 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
); });