使用Laravel 5格式化URL查询字符串(如Stack Overflow)

时间:2015-08-11 01:50:36

标签: php string url laravel get

在我的网络应用程序中,我想要发布帖子的URL,就像在Stack Overflow中一样。例如:

http://mydomain/posts/214741/this-is-the-postname

然而,当我写一条路线时:

Route::get('post/{postid}/{postname}',array('as' => 'postlink', 'uses' => 'Post@singlePost'));

现在发生的事情如下:

1)将此链接粘贴到地址栏中:

http://mydomain/en/post/214741/postname

2)按回车键,由于获取请求,链接变为:

http://mydomain/en/post/214741/postname?q=post%2F214741%2Fpostname

但是,我想要的是URL保持与粘贴时完全相同,确切地说,当您在浏览器中粘贴Stack Overflow链接并单击Enter时它会如何发生。

我需要它作为get请求,因为用户可以直接使用链接,因此我的控制器需要直接从中获取信息。

用Laravel处理这种情况的最佳方法是什么?

我的.htaccess文件是:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
RewriteBase /public

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    #RewriteRule ^ index.php [L]
    RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]
</IfModule>

2 个答案:

答案 0 :(得分:2)

您的.htaccess看起来好像已被更改为将请求的uri作为参数q的查询字符串变量传递回index.php。

而不是:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?q=$1

尝试将其更改回Laravel附带的原始版本。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

答案 1 :(得分:0)

您好,您可以为postName变量添加模式

{{1}}

您的问题是在生产或Laravel的开发服务器上发生的吗?