<?php
namespace OpencartCatalogControllerStartup;
/**
* Class SeoUrl
*
* @package OpencartCatalogControllerStartup
*/
class SeoUrl extends OpencartSystemEngineController {
/**
* @return void
*/
public function index(): void {
if ($this->config->get('config_seo_url')) {
$this->url->addRewrite($this);
$this->load->model('design/seo_url');
if (isset($this->request->get['_route_'])) {
$parts = explode('/', $this->request->get['_route_']);
// remove any empty arrays from trailing
if (oc_strlen(end($parts)) == 0) {
array_pop($parts);
}
foreach ($parts as $part) {
$seo_url_info = $this->model_design_seo_url->getSeoUrlByKeyword($part);
if ($seo_url_info) {
$this->request->get[$seo_url_info['key']] = html_entity_decode($seo_url_info['value'], ENT_QUOTES, 'UTF-8');
}
}
}
}
}
/**
* @param string $link
*
* @return string
*/
public function rewrite(string $link): string {
$url_info = parse_url(str_replace('&', '&', $link));
$url = $url_info['scheme'] . '://' . $url_info['host'];
if (isset($url_info['port'])) {
$url .= ':' . $url_info['port'];
}
parse_str($url_info['query'], $query);
$this->load->model('design/seo_url');
$paths = [];
// Dil parametresini sakla
$language = '';
if (isset($query['language'])) {
$language = $query['language'];
unset($query['language']);
}
// Eğer route varsa ilk olarak onu işleyelim
if (isset($query['route'])) {
$route = $query['route'];
$result = $this->model_design_seo_url->getSeoUrlByKeyValue('route', $route);
if ($result) {
$paths[] = $result;
unset($query['route']);
}
}
// Diğer parametreleri işle (product_id, search vs.)
foreach ($query as $key => $value) {
$result = $this->model_design_seo_url->getSeoUrlByKeyValue((string)$key, (string)$value);
if ($result) {
$paths[] = $result;
unset($query[$key]);
}
}
// Sıralama
usort($paths, fn($a, $b) => $a['sort_order'] <=> $b['sort_order']);
$url .= str_replace('/index.php', '', $url_info['path']);
foreach ($paths as $result) {
$url .= '/' . $result['keyword'];
}
// Dil parametresini ekle
if ($language) {
$query['language'] = $language;
}
// Kalan query'leri ekle
if ($query) {
$url .= '?' . http_build_query($query);
}
return $url;
}
}
##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# 1.To use URL Alias you need to be running apache with mod_rewrite enabled.
# 2. In your opencart directory rename .htaccess.txt (this file) to .htaccess
#
# For any support issues please visit: https://www.opencart.com
#
# The line 'Options +FollowSymLinks' may cause problems with some server configurations.
# It is required for the use of Apache mod_rewrite, but it may have already been set by
# your server administrator in a way that disallows changing it in this .htaccess file.
# If you encounter problems (e.g. site is not loading), comment out this line by adding a # in front
# FLOC is a feature suggested by Google, if this header shall not be set, disable the line
# having 'interest-cohort' by adding a # in front
##
## No directory listings
<IfModule mod_autoindex.c>
IndexIgnore *
</IfModule>
## No-Referrer-Header
<IfModule mod_headers.c>
Header set Referrer-Policy "no-referrer"
</IfModule>
## Suppress mime type detection in browsers for unknown types and prevent FLOC
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set Permissions-Policy "interest-cohort=()"
</IfModule>
## Can be commented out if causes errors, see notes above.
Options +FollowSymlinks
## Prevent Directory listing
Options -Indexes
## Prevent Direct Access to files
<FilesMatch "(?i)((.tpl|.twig|.ini|.log|(?<!robots).txt))">
Require all denied
## For apache 2.2 and older, replace "Require all denied" with these two lines :
# Order deny,allow
# Deny from all
</FilesMatch>
## SEO URL Settings
RewriteEngine On
## If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
RewriteBase /upload/
## Rewrite Rules
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*.(ico|gif|jpg|jpeg|png|webp|js|css|svg)
RewriteRule ^(.*)$ index.php?_route_=$1 [L,QSA]
## Optional error documents
#ErrorDocument 400 /index.php?route=error/not_found
#ErrorDocument 401 /index.php?route=error/permission
#ErrorDocument 403 /index.php?route=error/not_found
#ErrorDocument 404 /index.php?route=error/not_found
#ErrorDocument 500 /index.php?route=error/not_found
#ErrorDocument 503 /index.php?route=error/not_found
## Additional Settings that may need to be enabled for some servers
## Uncomment the commands by removing the # sign in front of it.
## If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
# php_flag register_globals off
# 2. If your cart has magic quotes enabled, This may work to disable it:
# php_flag magic_quotes_gpc Off
# 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
# php_value upload_max_filesize 999M
# 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value post_max_size 999M
# 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_execution_time 200
# 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_input_time 200
# 7. disable open_basedir limitations
# php_admin_value open_basedir none
when i activate seo urls on admin panel. http://localhost/upload/koltuk-takimlari?route=product%2Fcategory always links coming this type. but i want to remove this part from url ?route=product%2Fcategory . I tried to ask gpt and claude and cursor but it didnt work . please help me
I tried to ask chatgpt but it didnt work