Giter Site home page Giter Site logo

riasvdv / statamic-redirect Goto Github PK

View Code? Open in Web Editor NEW
18.0 2.0 20.0 1.17 MB

Redirect allows you to redirect legacy URLs, so that you don't lose SEO value when rebuilding & restructuring a website.

Home Page: https://statamic.com/addons/rias/redirect

PHP 70.63% JavaScript 3.18% Vue 15.59% Blade 10.60%
statamic statamic-addon statamic-v3 hacktoberfest

statamic-redirect's Introduction

Redirect plugin for Statamic

Redirect allows you to redirect legacy URLs, so that you don't lose SEO value when rebuilding & restructuring a website.

Note This addon requires sqlite to be installed to work

Screenshot

Redirect supports traditional exact and RegEx matching of URL patterns.

Redirect will also automatically create a redirect for you if you change an entry's slug or uri.

Unlike utilizing .htaccess to do redirects, Redirect does not add overhead to each request for each redirect you have in place.

Redirect has no impact on your website's performance until a 404 exception happens.

Read more in the documentation

License

Redirect requires a license to be used while on a production site. You can purchase one at https://statamic.com/addons/rias/redirect.

You may use Redirect without a license while developing locally.

Installation

Require it using Composer.

composer require rias/statamic-redirect

Brought to you by Rias

statamic-redirect's People

Contributors

dgjorgjiev-snk avatar dniccum avatar duncanmcclean avatar faltjo avatar frittenkeez avatar galengidman avatar isarphilipp avatar jackmcdade avatar jhhazelaar avatar karpoq avatar linuxtheblack avatar okaufmann avatar oleksiibrylin avatar pixney-william avatar renovate[bot] avatar riasvdv avatar ryanmitchell avatar sylvesterdamgaard avatar vluijkx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

statamic-redirect's Issues

Missing migration drop statements

Either prefixing the tables with redirect_ or allow a custom prefix would prevent clashes with other tables.

public function down()
{
    Schema::dropIfExists('hits');
    Schema::dropIfExists('errors');
}

Take another look at error cleaning

  • Double check tests
  • Make sure mass deletion works if there are too many errors (no oom)
  • Just make it generally more robust

The Stache & filesystem don't like lots of files

Delete button doesn't work

Hi,

It worked, but then it stopped. Can't delete anything, when I press on Delete button, nothing happens.

High server load with addon installed

With the addon installed on our staging server all is good but on production which is running on the same environment setup the server load is so high it takes our website offline. It's an old domain with many 404 requests coming in. We can turn off 'clean_errors_on_save' in the config but would ideally like to turn off 404 logging altogether, even just the interface for adding manual redirects alone would be good enough.
Currently we can't use the addon, any ideas how we can reduce the high server load or any plans to update the addon with more options to control logging?

Error On page Udating and saving

Hi

I have updated Statamic Redirect Plugin to the latest version, after this I tried to edit - update the pages (collections), I'm getting this error.

Too few arguments to function Rias\StatamicRedirect\Data\Redirect::findByUrl(), 1 passed in .....\vendor\rias\statamic-redirect\src\Listeners\CreateRedirect.php on line 21 and exactly 2 expected

Error when deleting the first redirect

Trying to delete multiple redirects, you'll get an error 500 (trying to run delete() on null), if you attempt to delete the first entry after just having deleted the previous first entry.
Refreshing the page will make it possible to delete the first entry again.

Feature Request - Multisite support

Hi Rias,

thank you for this awesome plugin! Just purchased the license and it works like a charm! I am using the plugin for a multisite, running on 5 different domains (and so 5 different languages).

I find it difficult that I only can manage all redirects for all sites in one dashboard, instead of managing them per multisite. I cannot see on what domain an unhandled redirect has been fired. Also, when I set a new redirect rule, it is applied on all multisites, while I want to manage it for one of them.

I do not know much about Statamics codebase, but is it hard to make this plugin support multisites?

Regards,

Bob

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Repository problems

These problems occurred while renovating this repository. View logs.

  • WARN: Unsupported composer value

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

composer
composer.json
  • php ^7.4|^8.0
  • spatie/simple-excel ^1.0|^2.0|^3.0
  • statamic/cms ^3.2|^4.0|^5.0
  • friendsofphp/php-cs-fixer ^3.10
  • orchestra/testbench ^v9.0.0
  • phpunit/phpunit ^9.6|^10.4
github-actions
.github/workflows/php-cs-fixer.yml
  • actions/checkout v4
  • stefanzweifel/git-auto-commit-action v5.0.1
.github/workflows/run-tests.yml
  • actions/checkout v4
  • shivammathur/setup-php v2
npm
package.json
  • laravel-mix 6.0.49
  • vue 2.7.16
  • vue-template-compiler 2.7.16
  • prettier 3.2.5
  • vue-loader 15.11.1

  • Check this box to trigger a request for Renovate to run again on this repository

stache error with disabled logging

We see a lot of error like this on production with a site with disabled logging.

I think the might be caused by disabled logging and a old config which implies log_hits: true or just a missing check in the logic.

[2021-11-22 10:24:41] production.DEBUG: RuntimeException: SplFileInfo::getMTime(): stat failed for /srv/users/some-website/apps/some-website/storage/redirect/errors/8a/53/8a53792b-22ca-4c98-beca-7f00e0b67581.yaml in /srv/users/some-website/apps/some-website/vendor/statamic/cms/src/Stache/Traverser.php:38
Stack trace:
#0 /srv/users/some-website/apps/some-website/vendor/statamic/cms/src/Stache/Traverser.php(38): SplFileInfo->getMTime()
#1 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(711): Statamic\Stache\Traverser->Statamic\Stache\{closure}(Object(Symfony\Component\Finder\SplFileInfo), 50556)
#2 /srv/users/some-website/apps/some-website/vendor/statamic/cms/src/Stache/Traverser.php(39): Illuminate\Support\Collection->mapWithKeys(Object(Closure))
#3 /srv/users/some-website/apps/some-website/vendor/statamic/cms/src/Stache/Stores/Store.php(182): Statamic\Stache\Traverser->traverse(Object(Rias\StatamicRedirect\Stache\Errors\ErrorStore))
#4 /srv/users/some-website/apps/some-website/vendor/statamic/cms/src/Stache/Stores/Store.php(284): Statamic\Stache\Stores\Store->handleFileChanges()
#5 /srv/users/some-website/apps/some-website/vendor/rias/statamic-redirect/src/Stache/Errors/ErrorQueryBuilder.php(16): Statamic\Stache\Stores\Store->paths()
#6 /srv/users/some-website/apps/some-website/vendor/statamic/cms/src/Stache/Query/Builder.php(26): Rias\StatamicRedirect\Stache\Errors\ErrorQueryBuilder->getFilteredKeys()
#7 /srv/users/some-website/apps/some-website/vendor/rias/statamic-redirect/src/Stache/Errors/ErrorRepository.php(26): Statamic\Stache\Query\Builder->get()
#8 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Rias\StatamicRedirect\Stache\Errors\ErrorRepository->all()
#9 /srv/users/some-website/apps/some-website/vendor/rias/statamic-redirect/src/Jobs/CleanErrorsJob.php(26): Illuminate\Support\Facades\Facade::__callStatic('all', Array)
#10 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Rias\StatamicRedirect\Jobs\CleanErrorsJob->handle()
#11 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#12 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#13 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#14 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#15 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(128): Illuminate\Container\Container->call(Array)
#16 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Rias\StatamicRedirect\Jobs\CleanErrorsJob))
#17 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Rias\StatamicRedirect\Jobs\CleanErrorsJob))
#18 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#19 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(78): Illuminate\Bus\Dispatcher->dispatchNow(Object(Rias\StatamicRedirect\Jobs\CleanErrorsJob))
#20 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php(193): Illuminate\Bus\Dispatcher->dispatch(Object(Rias\StatamicRedirect\Jobs\CleanErrorsJob))
#21 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php(31): Illuminate\Foundation\Bus\PendingDispatch->__destruct()
#22 /srv/users/some-website/apps/some-website/vendor/rias/statamic-redirect/src/Http/Middleware/HandleNotFound.php(37): Rias\StatamicRedirect\Jobs\CleanErrorsJob::dispatchIf(true)
#23 /srv/users/some-website/apps/some-website/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Rias\StatamicRedirect\Http\Middleware\HandleNotFound->handle(Object(Illuminate\Http\Request), Object(Closure))

The config is based on an older version of the addon I suppose as it is missing log_hits

<?php

return [

    /**
     * Controls whether Redirect automatically creates a redirect
     * when an entry's URI changes.
     */
    'create_entry_redirects' => true,

    /**
     * Controls whether Redirect logs 404 errors
     */
    'log_errors' => false,

    /**
     * Should error logs be cleaned? Make sure your schedule is running.
     */
    'clean_errors' => true,

    /**
     * Should error logs be cleaned when saving a new error?
     */
    'clean_errors_on_save' => true,

    /**
     * Error logs older than this will be deleted.
     * @link http://php.net/manual/en/dateinterval.createfromdatestring.php
     */
    'clean_older_than' => '1 month',

    /*
     * The maximum number of unique errors to keep.
     * This does not include individual hits.
     */
    'keep_unique_errors' => 1000,

    /*
     * Error repository, you can change this to use a different
     * storage method for the errors. The class must implement
     * \Rias\StatamicRedirect\Contracts\ErrorRepository
     */
    'error_repository' => \Rias\StatamicRedirect\Stache\Errors\ErrorRepository::class,

    /*
     * Redirect repository, you can change this to use a different
     * storage method for the redirect. The class must implement
     * \Rias\StatamicRedirect\Contracts\RedirectRepository
     */
    'redirect_repository' => \Rias\StatamicRedirect\Stache\Redirects\RedirectRepository::class,
];

Slow performance in production

I have the Redirect Add-On installed on my site, and I'm noticing it's pretty slow at displaying the dashboard and more often then not just doesn't show anything at all. It's showing some 950+ pages worth of errors, the site was previously on Wordpress... Here's a screenshot of the dashboard, are there any tips on getting the add-on to be more performant? I'm using Digital Ocean and Ploi for my hosting/server management setup. Thanks!

Redirect Dahsboard

Feature request: Clear All

Would it possible to add a button that just clears all the current handled and unhandled redirects?

This would be handy when we go in once a week and are happy to just clear everything and start looking at new issues.

route:cache fails because of duplicated route "redirect.redirects.import"

In version 1.6.0 the import functionality was introduced - with 2 new routes.

These routes were created under the same name "redirect.redirects.import" - one for GET, one for POST.
(File: routes/cp.php)

As a result, we now get a serialisation error with the route:cache command.

LogicException  
Unable to prepare route [redaktion/redirect/redirects/import] for serialization. Another route has already been assigned name [statamic.cp.redirect.redirects.import].

  at vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php:218

Clear Button is not centered with input group.

This is really minor, but I've noticed the clear button on the errors view looks a little visually off when viewing a custom report.

Screen Shot 2022-01-21 at 3 06 44 PM

If it's possible to move the clear button to inside the input group, it line up better and change the tw classes to:

<a :href="cp_url('redirect/errors/clear')" class="ml-2 btn">Clear all</a>

Screen Shot 2022-01-21 at 3 08 48 PM

Could not find driver (sqlite_master)

Hi, first time testing this add-on. After running composer require rias/statamic-redirect I get this error:
Could not find driver (SQL: select * from sqlite_master where type = 'table' and name = errors)

I've never used sqllite so I'm not sure what to do here. My app is using a mysql database at the primary driver so I'd rather not change that configuration.

Any ideas?

Doesn't support PHP 7.4?

Hi there,

It seems that the add-on doesn't support PHP 7.4?

Problem 1
- Root composer.json requires rias/statamic-redirect 2.1.* -> satisfiable by rias/statamic-redirect[2.1.0, 2.1.1, 2.1.2].
- rias/statamic-redirect[2.1.0, ..., 2.1.2] require php ^8.0 -> your php version (7.4.28) does not satisfy that requirement.

Error when using Database Users

Using Redirect Addon and storing Users in Database throw an error:

BadMethodCallException
Call to undefined method App\Models\User::isSuper()
/redirect/dashboard

Stack trace

BadMethodCallException Call to undefined method App\Models\User::isSuper()
vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:50 Illuminate\Database\Eloquent\Model::throwBadMethodCallException
vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:36 Illuminate\Database\Eloquent\Model::forwardCallTo
vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1885 Illuminate\Database\Eloquent\Model::__call
vendor/rias/statamic-redirect/src/Controllers/DashboardController.php:16 Rias\StatamicRedirect\Controllers\DashboardController::__invoke
vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:48 Illuminate\Routing\ControllerDispatcher::dispatch
vendor/laravel/framework/src/Illuminate/Routing/Route.php:254 Illuminate\Routing\Route::runController
vendor/laravel/framework/src/Illuminate/Routing/Route.php:197 Illuminate\Routing\Route::run
vendor/laravel/framework/src/Illuminate/Routing/Router.php:692 Illuminate\Routing\Router::Illuminate\Routing{closure}
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/CP/CountUsers.php:18 Statamic\Http\Middleware\CP\CountUsers::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/CP/Localize.php:16 Statamic\Http\Middleware\CP\Localize::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/CP/Authorize.php:25 Statamic\Http\Middleware\CP\Authorize::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/CP/ContactOutpost.php:21 Statamic\Http\Middleware\CP\ContactOutpost::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/CP/ControlPanel.php:16 Statamic\Http\Middleware\CP\ControlPanel::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41 Illuminate\Routing\Middleware\SubstituteBindings::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:77 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49 Illuminate\View\Middleware\ShareErrorsFromSession::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:121 Illuminate\Session\Middleware\StartSession::handleStatefulRequest
vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63 Illuminate\Session\Middleware\StartSession::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:67 Illuminate\Cookie\Middleware\EncryptCookies::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/SwapExceptionHandler.php:19 Statamic\Http\Middleware\SwapExceptionHandler::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103 Illuminate\Pipeline\Pipeline::then
vendor/laravel/framework/src/Illuminate/Routing/Router.php:694 Illuminate\Routing\Router::runRouteWithinStack
vendor/laravel/framework/src/Illuminate/Routing/Router.php:669 Illuminate\Routing\Router::runRoute
vendor/laravel/framework/src/Illuminate/Routing/Router.php:635 Illuminate\Routing\Router::dispatchToRoute
vendor/laravel/framework/src/Illuminate/Routing/Router.php:624 Illuminate\Routing\Router::dispatch
vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:166 Illuminate\Foundation\Http\Kernel::Illuminate\Foundation\Http{closure}
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/CheckMultisite.php:14 Statamic\Http\Middleware\CheckMultisite::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/statamic/cms/src/Http/Middleware/PoweredByHeader.php:19 Statamic\Http\Middleware\PoweredByHeader::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21 Illuminate\Foundation\Http\Middleware\TransformsRequest::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21 Illuminate\Foundation\Http\Middleware\TransformsRequest::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27 Illuminate\Foundation\Http\Middleware\ValidatePostSize::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php:87 Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/fruitcake/laravel-cors/src/HandleCors.php:37 Fruitcake\Cors\HandleCors::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/fideloper/proxy/src/TrustProxies.php:57 Fideloper\Proxy\TrustProxies::handle
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167 Illuminate\Pipeline\Pipeline::Illuminate\Pipeline{closure}
vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103 Illuminate\Pipeline\Pipeline::then
vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:141 Illuminate\Foundation\Http\Kernel::sendRequestThroughRouter
vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:110 Illuminate\Foundation\Http\Kernel::handle
public/index.php:52 [main]

Import Redirects

Hey there,

Any plans in a roadmap to have Import Redirects feature? At this moment there is Export Redirects feature only.

Thanks.

PHP8 support

Currently, it is not possible to use this package with PHP8 as "spatie/data-transfer-object": "^1.13" uses still ^7.1.
Also, I didn't find any usage of spatie package inside.
Could you please update the version or just remove it (if it is not needed), so we can still use statamic-redirect with PHP8?
Thank you

Cannot upgrade to Statamic 3.2.32

If I run composer update on my installation, I get the following error:

 InvalidArgumentException 

  Passed value cannot be an array

  at vendor/statamic/stringy/src/Stringy.php:45
     41▕      */
     42▕     public function __construct($str = '', $encoding = null)
     43▕     {
     44▕         if (is_array($str)) {
  ➜  45▕             throw new InvalidArgumentException(
     46▕                 'Passed value cannot be an array'
     47▕             );
     48▕         } elseif (is_object($str) && !method_exists($str, '__toString')) {
     49▕             throw new InvalidArgumentException(

      +8 vendor frames 
  9   [internal]:0
      Statamic\Extend\AddonRepository::Statamic\Extend\{closure}("rias/statamic-redirect")

      +14 vendor frames 
  24  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1

Any idea what this might be?

Call to undefined method Rias\\StatamicRedirect\\Jobs\\CleanErrorsJob::dispatchIf()

Whenever I try to retrieve a collection, this error is thrown and the collection therefore can't be retrieved.

How can it be fixed?

The version is 1.3.1.

"message": "Call to undefined method Rias\\StatamicRedirect\\Jobs\\CleanErrorsJob::dispatchIf()", "exception": "Symfony\\Component\\Debug\\Exception\\FatalThrowableError", "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/rias/statamic-redirect/src/Http/Middleware/HandleNotFound.php", "line": 32, "trace": [ { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Rias\\StatamicRedirect\\Http\\Middleware\\HandleNotFound", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php", "line": 41, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php", "line": 77, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php", "line": 49, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\View\\Middleware\\ShareErrorsFromSession", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php", "line": 56, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Session\\Middleware\\StartSession", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php", "line": 37, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php", "line": 67, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Cookie\\Middleware\\EncryptCookies", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/statamic/cms/src/StaticCaching/Middleware/Retrieve.php", "line": 34, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Statamic\\StaticCaching\\Middleware\\Retrieve", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 105, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Routing/Router.php", "line": 683, "function": "then", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Routing/Router.php", "line": 658, "function": "runRouteWithinStack", "class": "Illuminate\\Routing\\Router", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Routing/Router.php", "line": 624, "function": "runRoute", "class": "Illuminate\\Routing\\Router", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Routing/Router.php", "line": 613, "function": "dispatchToRoute", "class": "Illuminate\\Routing\\Router", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php", "line": 170, "function": "dispatch", "class": "Illuminate\\Routing\\Router", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 130, "function": "Illuminate\\Foundation\\Http\\{closure}", "class": "Illuminate\\Foundation\\Http\\Kernel", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/statamic/cms/src/Http/Middleware/CheckMultisite.php", "line": 14, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Statamic\\Http\\Middleware\\CheckMultisite", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/statamic/cms/src/Http/Middleware/PoweredByHeader.php", "line": 19, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Statamic\\Http\\Middleware\\PoweredByHeader", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php", "line": 67, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Barryvdh\\Debugbar\\Middleware\\InjectDebugbar", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/fideloper/proxy/src/TrustProxies.php", "line": 57, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Fideloper\\Proxy\\TrustProxies", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php", "line": 21, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php", "line": 21, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php", "line": 27, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php", "line": 63, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 171, "function": "handle", "class": "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 105, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php", "line": 145, "function": "then", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php", "line": 110, "function": "sendRequestThroughRouter", "class": "Illuminate\\Foundation\\Http\\Kernel", "type": "->" }, { "file": "/Users/fredrikgm/Documents/Projects/altandetligedk-project-krugman/public/index.php", "line": 55, "function": "handle", "class": "Illuminate\\Foundation\\Http\\Kernel", "type": "->" } ] }

Cannot edit redirects

When you try and edit a redirect, you get an error A non well formed numeric value encountered, because the edit method typehints $id to be an int, but the ID is actually a UUID.

Happens on 1.1.0

Redirects only working with a trailing '/'

Having an issue where redirects don't seem to be working as expected.

I have a redirect setup as: /articles/A > /articles/B

When I then visit /articles/A I don't get redirected, but if I append an extra '/' I do get redirected (//articles/A takes me to /articles/B).

I have setup the redirects as it suggests so wondering if this is a bug with the addon?

Screenshot 2021-05-28 at 15 38 47

Thanks! Harry.

Question: How would you configure Redirect on load balanced servers?

Hey @riasvdv
I've been using your Redirect addon for a client site. We have our development site (dev.example.com) and for production we deploy to four load balanced servers. What would you recommend for cleaning errors in this situation? or would you recommend disabling error tracking on our production sites altogether?

Thanks.

I'm getting the following console error when trying to delete a redirect

I'm getting the following error message in the console when I try to delete a redirect.

vue.common.prod.js:6 TypeError: Cannot read property '1' of undefined at a.deletingModalTitleFromRowKey (cp.js:1) at a.deletingModalTitle (cp.js:1) at fn.get (vue.common.prod.js:6) at fn.evaluate (vue.common.prod.js:6) at a.deletingModalTitle (vue.common.prod.js:6) at fn (cp.js:1) at r (vue.common.prod.js:6) at a.bt [as _t] (vue.common.prod.js:6) at Table.vue?3a47:5 at a.vt [as _l] (vue.common.prod.js:6) qe @ vue.common.prod.js:6 Be @ vue.common.prod.js:6 Re @ vue.common.prod.js:6 e._render @ vue.common.prod.js:6 r @ vue.common.prod.js:6 fn.get @ vue.common.prod.js:6 fn.run @ vue.common.prod.js:6 un @ vue.common.prod.js:6 (anonymous) @ vue.common.prod.js:6 Ge @ vue.common.prod.js:6 Promise.then (async) Ue @ vue.common.prod.js:6 tt @ vue.common.prod.js:6 (anonymous) @ vue.common.prod.js:6 fn.update @ vue.common.prod.js:6 de.notify @ vue.common.prod.js:6 set @ vue.common.prod.js:6 hn.set @ vue.common.prod.js:6 confirmDeleteRow @ cp.js:1 click @ cp.js:1 $e @ vue.common.prod.js:6 n @ vue.common.prod.js:6 $e @ vue.common.prod.js:6 e.$emit @ vue.common.prod.js:6 selectAndClose @ DropdownItem.vue:33 $e @ vue.common.prod.js:6 n @ vue.common.prod.js:6 Kr.o._wrapper @ vue.common.prod.js:6

This effectively means, that it is impossible to delete records right now.

Using the latest version of Statamic: 3.1.14
Using version 1.4.6 of this plugin.

url with params

Hello,

I have created a redirect with /old-product-name -> /new-product-name which is working fine.

We are using google ads to drive traffic and noticed that on ´/old-product-name?gclid=CjwKC...` shows red (not handled) on redirect dashboard.

When manually trying the url, its redirected to the /new-product-name

Is this a bug on dashboard or is the redirection broken some how?

Call to undefined method App\Models\User::isSuper()

Hi,

I have just tried to install your redirect plugin in a site where I had to move users to a separate sqlite, following https://statamic.dev/tips/storing-users-in-a-database

After installation of the redirect plugin I am facing a
BadMethodCallException
Call to undefined method App\Models\User::isSuper()

issue.

The User Class is

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

as per description. Can you please help?

Broken dashboard after error file yaml corruption

Not sure how it happend

[2021-09-01 14:37:28] production.ERROR: Unable to parse at line 182 (near "TML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84'"). {"userId":"5793e26f-6336-45f0-8113-8d83e127da94","exception":"[object] (Statamic\\Yaml\\ParseException(code: 0): Unable to parse at line 182 (near \"TML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84'\"). at /.../storage/redirect/errors/b7b041b9-09fd-4b0c-a06c-80ce900d780b.yaml:182)

In the error yaml it looks like this

handled: true
handledDestination: /fr/distributeur-automatique-de-nourriture-entreprises
TML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84'
      ip: xxx.xxx.xxx.xxx
      referer: 'https://www.google.ch/'

Error running clean-errors

Our redirects were all down today. We also couldn't get to our dashboard page on the cp.

I went to run php please redirect:clean-errors and got this error:

runcloud@plcom-ubuntu-s-1vcpu-1gb-nyc3-01:~/webapps/app-redacted-v3-dev$ php please redirect:clean-errors
Cleaning errors older than 1 week

   Statamic\Yaml\ParseException 

  Unable to parse at line 812 (near "9; SM-G955F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36'").

  at storage/redirect/errors/8d6aa1c3-6541-42d0-aab0-5c1dfbd47aa7.yaml:812
    808| hitsCount: 134
    809| latest: 1624381447
    810| handled: true
    811| handledDestination: /disability-insurance
  > 812| 9; SM-G955F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36'
    813|       ip: 40.94.36.61
    814|       referer: null
    815| hitsCount: 135
    816| latest: 1624381447

  • Invalid YAML: Correct any syntax errors. You may have used YAML 1.0 syntax, but 1.2 is expected. 
    https://statamic.dev/yaml

      +39 vendor frames 
  40  please:37
      Illuminate\Foundation\Console\Kernel::handle()

I needed things up ASAP so I just deleted the yaml file instead of messing w/ it.

We are on version 1.4.2

Redirect not working

Hello,

I'm testing locally redirects, but for some reason is not working:

image
when entering the default root (/) nothing happens.

I have a multisite setup and latest statamic version

Any ideas whats wrong?

Edit:
also deleting is not doing anything:
image

Console error: Cannot read property '0' of undefined

Incorrect value when inserting in error table with mysql driver

When use MySQL as the database driver we get the following error :

[2022-03-17 14:27:18] local.DEBUG: PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1647523638' for column ks.errors.lastSeenAt at row 1 in /code/cms/vendor/laravel/framework/src/Illuminate/Database/Connection.php:501

Allow to customize paths of stores

We usually have a bit unconventional setup where generated content is not persisted in /content.
We'd like to have the option to use the config to maintain different paths.

Import fails

I cannot import redirects. I get this error when I attempt to re-upload the previously exported CSV file

Box\Spout\Common\Exception\IOException
Could not open /var/www/html/storage/app/data-import/data-import.csv for reading! File does not exist.

Deleting does not work when using search/pagination

image

Just had a client report an issue where they can't delete redirects they've created. I couldn't originally reproduce but after asking for more information, I realised it's an issue with search.

When you search for a redirect, then try to 'Delete', nothing happens, apart from some console errors:

image

Empty dashboard on production

Hey Rias,
I've just upgraded to the latest 2.0 version and have force updated the config. Errors are logging but there seems to be a JS error on the dashboard preventing them from displaying:

TypeError: Cannot read properties of undefined (reading 'length')
    at fn (cp.js:1:13709)
    at r (vendor.js?v=3.2.32:1:1207294)
    at a.bt [as _t] (vendor.js?v=3.2.32:1:1208126)
    at app.js?v=3.2.32:1:2111864
    at a.vt [as _l] (vendor.js?v=3.2.32:1:1207695)
    at app.js?v=3.2.32:1:2111727
    at a.vt [as _l] (vendor.js?v=3.2.32:1:1207695)
    at a.<anonymous> (app.js?v=3.2.32:1:2111150)
    at a.e._render (vendor.js?v=3.2.32:1:1226337)
    at a.r (vendor.js?v=3.2.32:1:1259707)
    ```

Destination column empty

The Destination column in the Redirect Dashboard doesn't show any results.

The feature was added after issue #3, but it doesn't seem to work for me. Is this a general issue with the plugin in its current state, or is something amiss with my installation?

Statamic 3.1.23
Statamic Redirect 1.4.6

Empty dashboard table with disabled log_hits

On a high traffic site with a lot of error we have the issue that the site breaks after some time because of strange errors with the stache backend. The client wants the dashboard on production so I tried to run it with log_hits disabled.

But unfortunately the dashboard is broken when running with this config
Redirects_‹_Statamic
Check the pagination, it works. Data is returned by the API but frontend breaks.

It would be great if the addon could have the data incl. number of hits but without the additional data for each individual hit.

JS-Error in console

vue.common.prod.js:6 
       TypeError: Cannot read properties of null (reading 'length')
    at fn (cp.js:1)
    at r (vue.common.prod.js:6)
    at a.bt [as _t] (vue.common.prod.js:6)
    at Table.vue?6111:5
    at a.vt [as _l] (vue.common.prod.js:6)
    at Table.vue?6111:5
    at a.vt [as _l] (vue.common.prod.js:6)
    at a.<anonymous> (Table.vue?6111:5)
    at a.e._render (vue.common.prod.js:6)
    at a.r (vue.common.prod.js:6)

Offending line of code

'User agent: ' + (error.hits[error.hits.length - 1].data.userAgent || 'n/a') + '\n' +

Example entry from the /errors fetch request:

3: {id: "d48e5781-6942-4d7f-903c-f3b5e63f2738", url: "/test-404", handled: false,…}
handled: false
handledDestination: null
hits: null
hitsCount: 0
id: "d48e5781-6942-4d7f-903c-f3b5e63f2738"
latest: null
url: "/test-404" 

Here my config

<?php

return [

    /**
     * Controls whether Redirect automatically creates a redirect
     * when an entry's URI changes.
     */
    'create_entry_redirects' => true,

    /**
     * Controls whether Redirect logs 404 errors
     */
    'log_errors' => true,

    /**
     * Controls whether Redirect logs individual hits
     */
    'log_hits' => false,

    /**
     * Should error logs be cleaned? Make sure your schedule is running.
     */
    'clean_errors' => true,

    /**
     * Should error logs be cleaned when saving a new error?
     */
    'clean_errors_on_save' => false,

    /**
     * Error logs older than this will be deleted.
     * @link http://php.net/manual/en/dateinterval.createfromdatestring.php
     */
    'clean_older_than' => '1 week',

    /*
     * The maximum number of unique errors to keep.
     * This does not include individual hits.
     */
    'keep_unique_errors' => 500,

    /*
     * Error repository, you can change this to use a different
     * storage method for the errors. The class must implement
     * \Rias\StatamicRedirect\Contracts\ErrorRepository
     */
    'error_repository' => \Rias\StatamicRedirect\Stache\Errors\ErrorRepository::class,

    /*
     * Redirect repository, you can change this to use a different
     * storage method for the redirect. The class must implement
     * \Rias\StatamicRedirect\Contracts\RedirectRepository
     */
    'redirect_repository' => \Rias\StatamicRedirect\Stache\Redirects\RedirectRepository::class,

    'paths' => [
        /*
         * Customize where on filesystem the redirects is being stored
         * Useful when using a non-conventional setup where data not
         * be inside the usual storage/redirect/errors folder
         */
        'redirect_store' => base_path('content/redirects'),

        /*
         * Customize where on filesystem the error logs are being persisted
         * Useful when using a non-conventional setup where data should
         * not be in the the usual content/redirects folder
         */
        'error_store' => storage_path('redirect/errors'),
    ]
];

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.