允许在没有参数的情况下使用Symfony2路径的斜杠?

max*_*max 37 yaml symfony

acme_admin_dashboard:
    pattern:  /{_locale}/admin
    defaults: { _controller: AcmeBundle:Admin:dashboard }
Run Code Online (Sandbox Code Playgroud)

我希望这条路线可以在/en/admin/en/admin/.我怎么做到这一点?

wal*_*rra 36

我喜欢@ Kuchengeschmack的回答(/sf/answers/775484391/),因为它不会触发外部重定向.

这是一个yaml版本:

acme_admin_dashboard:
    pattern:  /{_locale}/admin{trailingSlash}
    defaults: { _controller: AcmeBundle:Admin:dashboard, trailingSlash : "/" }
    requirements: { trailingSlash : "[/]{0,1}" }
Run Code Online (Sandbox Code Playgroud)


小智 20

只需输入:

/**
* @Route("/route/of/some/page/")
*/
Run Code Online (Sandbox Code Playgroud)

所以

www.example.com/route/of/some/page 
Run Code Online (Sandbox Code Playgroud)

www.example.com/route/of/some/page/
Run Code Online (Sandbox Code Playgroud)

被接受了......

  • 哦,你不想这样做!它确实301 - 永久移动,因此不会重新发布POST参数!(https://maltronic.io/2015/08/09/adding-removing-trailing-slashes-from-urls/) (9认同)
  • 但是默认情况下所有链接都带有一个尾部斜杠..这看起来有点粗糙 (2认同)

小智 12

我找到了一个向路径添加尾部斜杠的解决方案.

意味着这两个环节正在 www.example.com/route/of/some/pagewww.example.com/route/of/some/page/.你可以这样做:

如果你的路线看起来像

/**
 * @Route("/route/of/some/page")
 */
public function pageAction() {
Run Code Online (Sandbox Code Playgroud)

改变是

/**
 * @Route("/route/of/some/page{trailingSlash}", requirements={"trailingSlash" = "[/]{0,1}"}, defaults={"trailingSlash" = "/"})
 */
public function pageAction() {
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢它背后的创意思想! (4认同)
  • 这不是没有意义的。对于预检OPTIONS请求非常有用,该请求不允许重定向。 (2认同)

Mar*_*rek 10

您也可以在.htaccess文件中使用重写规则:

假设您已经定义了这样的路线:

news:
  url:   /news
  param: { module: news, action: index }
Run Code Online (Sandbox Code Playgroud)

这将匹配http://something.something/news,但不是http://something.something/news/ 您可以添加带有斜杠的附加路径,但您也可以简单地使用此重写规则.htaccess文件:

RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

http://symfony-blog.driebit.nl/2010/07/url-routes-with-or-without-a-trailing-slash/


Act*_*ine 6

我将以下行破解成前控制器(app.php/app_dev.php)

$_SERVER['REQUEST_URI'] = preg_replace('|/$|', '', $_SERVER['REQUEST_URI'], 1);
Run Code Online (Sandbox Code Playgroud)

之前 $request = Request::createFromGlobals()


Oye*_*eme 5

路线:

 remove_trailing_slash:
        path: /{url}
        defaults: { _controller: AppBundle:Redirecting:removeTrailingSlash }
        requirements:
            url: .*/$
        methods: [GET]
Run Code Online (Sandbox Code Playgroud)

控制器:

// src/AppBundle/Controller/RedirectingController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class RedirectingController extends Controller
{
    public function removeTrailingSlashAction(Request $request)
    {
        $pathInfo = $request->getPathInfo();
        $requestUri = $request->getRequestUri();

        $url = str_replace($pathInfo, rtrim($pathInfo, ' /'), $requestUri);

        return $this->redirect($url, 301);
    }
}
Run Code Online (Sandbox Code Playgroud)

阅读更多:http://symfony.com/doc/current/routing/redirect_trailing_slash.html