【问题标题】:catalyst consistent url format with trailing slash带有斜杠的催化剂一致的 url 格式
【发布时间】:2013-05-25 08:12:01
【问题描述】:

我正在开发一个Catalyst 应用程序,但遇到Catalyst 解释网址的方式有问题。

假设在我们的 Catalyst 应用程序中,我们有一个控制器 Account。如果是这种情况,Catalyst 将解释

http://mydomain.com/accounthttp://mydomain.com/account/

index 操作的网址相同。

但是,出于 SEO 和链接目的(并且只是为了整体保持一致),我想强制 Catalyst 只识别一种格式并坚持使用它。

我发现了一个似乎为此而构建的模块:Catalyst::Plugin::SanitizeUrl,它的文档说你应该把

使用催化剂“SanitizeUrl”;

myapp.pm 中,这将为您处理一切。

但是,每当我使用它时,我都会收到此错误:

Bad request

在每次页面加载时。有谁知道让 Catalyst 只使用一种格式的简单方法?

【问题讨论】:

  • 带有斜杠的错误请求,没有,或两种方式?
  • 两种方式。似乎这里实际上有一个关于它的错误报告:rt.cpan.org/Public/Bug/Display.html?id=72399
  • 该错误报告中列出了一个备用模块。
  • 我试过那个模块,它实际上对我的网址没有影响(有或没有斜杠)

标签: perl url catalyst trailing-slash


【解决方案1】:

强制 Catalyst 仅使用一种格式而不使用斜杠的简单方法是将此方法添加到 MyApp.pm:

sub begin :Private {
    my ($self, $c) = @_;
    my @path = split "/", $c->req->path, -1;
    $c->detach('default') if @path and (pop @path eq '');
}

如果 uri 在任何请求中以斜杠结尾,它将重定向到“默认”方法,也就是 404 页。

【讨论】:

    【解决方案2】:

    我猜你可以根据尾随 / 是否存在将 url 转发到不同的操作方法。 所以,

    sub index :Path :Args(0) { 
        my ($self,$c) = @_;
        my $path = $c->request->path;
        my $matched = $path =~ s/(\/)$//;
        if ($matched) {
              $c->forward('withslash');
        }
        else {
              $c->forward('withoutslash');
        }
    }
    

    同样,这是一个未经尝试的解决方案,您可能需要检查一下。

    【讨论】:

      【解决方案3】:

      我最终将 edem 所说的与我所做的一些东西结合起来,这就是我的最终结果:

      sub begin :Private {
          my ($self, $c) = @_;
      
          #don't allow trailing slashes!
          my @path = split "/", $c->req->path, -1;
          if(@path and (pop @path eq '')) {
              my $p = join '/', @path;
              #set as moved permanently
              $c->res->redirect("/$p", 301);
              return;
          }
      }
      

      如果请求末尾有斜杠,它将始终重定向到相同的 url,但没有斜杠。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多