【问题标题】:Laravel URL from comain.com/category/slug to domain.com/categoryLaravel URL 从 comain.com/category/slug 到 domain.com/category
【发布时间】:2017-06-07 20:49:11
【问题描述】:

我搜索了答案,但没有找到适合我的答案。 我有表格“文章”,我在其中存储带有“slug”列的文章。

在我的路线文件中,我有路线:

Route::get('article/{slug}', 'ArticleController@viewArticle');

当我输入例如 /article/some-article-title 并且文章将显示时效果很好,但我想从 /some-article-title 访问。我试图改变路线,如:

Route::get('{slug}', 'ArticleController@viewArticle');

当我把它放在文件末尾时,它可以工作,但毕竟例如 WYSIWYG 现在可以工作(上传文件),并且一些图像停止工作(404 错误)。我已经尝试修改 .htaccess 文件,但仍然无法正常工作。

有什么想法吗?

我想创建这样的锚

<a href="http://www.domain.com/some-title-for-article">some-title-for-article</a> 

但现在链接看起来像这样:

<a href="http://www.domain.com/articles/some-title-for-article">some-title-for-article</a>

路由文件 web.php

Route::get('/', 'HomeController@index');

/* DEPLOY BITBUCKET */
Route::get('/deploy/', 'DeployController@index');
Route::post('/deploy/update',
    ['as' => 'deploy_update', 'uses' => 'DeployController@update']);

/* ADMIN PANEL */

Auth::routes();
Route::get('/admin/', 'AdminController@index');

/* ADMIN USERS */
Route::get('/admin/users', 'UserController@index');
Route::get('/admin/users/add/', 'UserController@add');
Route::post('/admin/users/create/', 'UserController@create');
Route::get('/admin/users/edit/{id}', 'UserController@edit');
Route::post('/admin/users/update/', 'UserController@update');
Route::delete('/admin/users/delete/{id}', 'UserController@delete');

/* ADMIN CATEGORIES */
Route::get('/admin/categories', 'CategoryController@index');
Route::get('/admin/categories/add/', 'CategoryController@add');
Route::post('/admin/categories/create/', 'CategoryController@create');
Route::get('/admin/categories/edit/{id}', 'CategoryController@edit');
Route::post('/admin/categories/update/', 'CategoryController@update');
Route::delete('/admin/categories/delete/{id}', 'CategoryController@delete');

/* ADMIN COMMENTS */
Route::get('/admin/comments', 'CommentController@index');
Route::get('/admin/comments/view/{id}', 'CommentController@view');
Route::get('/admin/comments/add/', 'CommentController@add');
Route::post('/admin/comments/create/', 'CommentController@create');
Route::post('/admin/comments/approve/{id}', 'CommentController@approve');
Route::delete('/admin/comments/delete/{id}', 'CommentController@delete');

/* ADMIN ARTICLES */
Route::get('/admin/articles', 'ArticleController@index');
Route::get('/admin/articles/view/{id}', 'ArticleController@view');
Route::get('/admin/articles/edit/{id}', 'ArticleController@edit');
Route::get('/admin/articles/add/', 'ArticleController@add');
Route::post('/admin/articles/create/', 'ArticleController@create');
Route::post('/admin/articles/approve/{id}', 'ArticleController@approve');
Route::delete('/admin/articles/delete/{id}', 'ArticleController@delete');
Route::post('/admin/articles/update/', 'ArticleController@update');

Route::post('image-upload','ImageController@imageUploadPost');

/* GALLERIES */

Route::get('/admin/galleries', 'GalleryController@index');
Route::get('/admin/galleries/view/{id}', 'GalleryController@view');
Route::get('/admin/galleries/edit/{id}', 'GalleryController@edit');
Route::get('/admin/galleries/add/', 'GalleryController@add');
Route::post('/admin/galleries/create/', 'GalleryController@create');
Route::post('/admin/galleries/approve/{id}', 'GalleryController@approve');
Route::delete('/admin/galleries/delete/{id}', 'GalleryController@delete');
Route::post('/admin/galleries/update/', 'GalleryController@update');

/* IMAGE CONTROLLER */
Route::delete('/admin/images/delete/{id}', 'ImageController@delete');
Route::get('/admin/images/info/{id}', 'ImageController@info');
Route::post('/admin/images/update/', 'ImageController@update');

/* CONTACT FORM */
Route::get('/kontakt/', 'ContactController@index');
Route::post('/kontakt/',
    ['as' => 'contact_send', 'uses' => 'ContactController@send']);

/* GALLERY UPLOAD */
Route::post('/gallery_upload/', 'GalleryController@upload');

/* ARTICLE CONTROLLER */
Route::get('{slug}', 'ArticleController@viewArticle')->name('view.article');
//Route::get('artykuly/{slug}', 'ArticleController@viewArticle');

【问题讨论】:

  • 请发布您的整个路线文件。您可能正在覆盖某些路线。

标签: laravel url seo


【解决方案1】:

请您尝试在您的路线上附加一个名称并用路线名称调用它吗?

像这样:

Route::get('{slug}', 'ArticleController@viewArticle')-&gt;name('view.article');

在你的 Blade 文件中创建锚点:

&lt;a href="route('view.article')"

【讨论】:

  • 感谢您的回答,还是同样的问题。我有这样的视图结构:/views - admin - article - layouts ...等我尝试在我的views/layout/master.blade.php中添加这个,然后我添加了:
  • 示例文章 123
  • 并按预期工作,它显示了我的视图/article/index.blade.php包含文章内容,但现在无法加载图像,并且我的管理面板中的所见即所得编辑器和文件上传也无法正常工作。
  • 您能否检查您的控制台是否有错误?如果某些东西没有加载,肯定有一些错误,你能检查一下 laravel 日志吗?
  • 问题不在于锚路由不显示自己。问题是 - 如何创建有效的 SEO 友好链接(不是通过 URL::to() 等锚定)。我想在“帖子名称”示例中创建所有链接(用于画廊、帖子、文章等),例如 cdn3.wpbeginner.com/wp-content/uploads/2016/01/…。如您所知 - 当您在路由文件的末尾添加类似 Route::get('{slug}', 'ArticleController@viewArticle');你可以从字面上匹配所有。所有系统都可以正常工作,但我必须创建所有对 SEO 友好的链接,而不是像 /gallery/some-title 等。
  • 我认为 wordpress 在数据库中为这种链接存储特殊的重写规则并检查模式,然后重定向到控制器/动作。那么,没有这个可以做到吗?
  • 我不能 100% 确定你想要什么,因为你说有些资产不起作用,现在你想要有条件的路由到你的控制器。是的,你应该使用模式匹配,如果你深入研究 wp 代码,你可以检查它们的逻辑并实现类似的东西。
  • 【解决方案2】:

    由于您没有使用路由名称,因此只需使用url() helper:

    {{ url('some-title-for-article') }}
    

    【讨论】:

    • 谢谢,我用它来创建链接。但这在单击它后给我一个错误,因为路由或 htaccess 未配置为处理该类型的 url
    • 这与 URL 构建无关,这是一个 Web 服务器问题。您需要为 Web 服务器使用正确的配置。例如,您可以尝试从this tutorial 进行配置。
    • 谢谢。我在服务器中使用工匠构建,并从命令(php artisan serve)运行应用程序,并从官方文档中的作曲家安装它。一切都很好,我只想要像 wordpress 一样的 URL,SEO 友好,可以通过路由做到这一点,还是在 htaccess 中做到这一点更好?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签