diff --git a/next.config.mjs b/next.config.mjs
index cd1aa1a7..f9c48da9 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -20,17 +20,13 @@ const nextConfig = {
},
webpack(config) {
- // Grab the existing rule that handles SVG imports
const fileLoaderRule = config.module.rules.find((rule) => rule.test?.test?.('.svg'));
-
config.module.rules.push(
- // Reapply the existing rule, but only for svg imports ending in ?url
{
...fileLoaderRule,
test: /\.svg$/i,
- resourceQuery: /url/, // *.svg?url
+ resourceQuery: /url/,
},
- // Convert all other *.svg imports to React components
{
test: /\.svg$/i,
issuer: fileLoaderRule.issuer,
@@ -56,10 +52,7 @@ const nextConfig = {
],
},
);
-
- // Modify the file loader rule to ignore *.svg, since we have it handled now.
fileLoaderRule.exclude = /\.svg$/i;
-
config.module.rules.push({
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
@@ -67,16 +60,244 @@ const nextConfig = {
filename: 'static/fonts/[name][ext]',
},
});
-
return config;
},
-
sassOptions: {
includePaths: ['styles'],
additionalData: `@import "src/styles/_globals.scss";`,
},
-
transpilePackages: ['three'],
+
+ async redirects() {
+ return [
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*MJ12bot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*Amazonbot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*ClaudeBot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*DotBot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*Linkbot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*Iframely.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*AhrefsBot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*PetalBot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*BLEXBot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*woorankreview.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*Barkrowler.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*Neevabot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*SeoSiteCheckup.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*SemrushBot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*RSiteAuditor.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*YandexBot.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*GrapeshotCrawler.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/(.*)',
+ has: [
+ {
+ type: 'header',
+ key: 'User-Agent',
+ value: '(.*proximic.*)',
+ },
+ ],
+ destination: '/401',
+ permanent: false,
+ },
+ {
+ source: '/wordpress',
+ destination: '/401',
+ permanent: true,
+ },
+ {
+ source: '/wp-login.php',
+ destination: '/401',
+ permanent: true,
+ },
+ ];
+ },
};
export default nextConfig;
diff --git a/src/app/shop/layout.tsx b/src/app/shop/layout.tsx
index 1e5525e9..91bb07d3 100644
--- a/src/app/shop/layout.tsx
+++ b/src/app/shop/layout.tsx
@@ -1,22 +1,18 @@
-// import { ReactNode } from 'react';
+import { ReactNode } from 'react';
-// import Breadcrumb from '@/components/Breadcrumb/Breadcrumb';
+import Breadcrumb from '@/components/Breadcrumb/Breadcrumb';
-// interface ShopLayoutProps {
-// children: ReactNode;
-// }
-
-// export default function ShopLayout({ children }: ShopLayoutProps) {
-// return (
-//