Autor Zpráva
Ikki
Profil
Ahoj,
potřeboval bych poradit s přesměrováním prostřednictvím .htaccess

Aktuálně mám adresu: web.cz/en/produkt/1 - tato adresa již nefunguje a potřebuji ji přesměrovat na: web.cz/produkt/1?lang=en
Důležité pro mě je pouze to, aby se /en/ změnilo na ?lang=en a to pro jakoukoliv stránku kterou otevřu. Je to možné?

Díky.
Kajman
Profil
Zkuste
RewriteEngine On
RewriteBase /
RewriteRule ^/?(en)/(.*)$ $2?lang=$1 [R=302,L,QSA,NE]
Stroganov
Profil *
Niečo takéto?

RewriteEingine on
RewriteRule ^(en)/(.*)$  /$2/?lang=$1
Ikki
Profil
Ahoj,
bohužel ani jedna varianta se nezdá funkční. Vždy skončí stránka chybou 404, ač s parametrem stránka existuje.
.Htaccess moc nerozumím, tak se blbě zeptám - ač jsem to zkoušel a nefunguje to, nechybí v tomto řádku /produkt/ nebo něco z adresy?
RewriteRule ^/?(en)/(.*)$ $2?lang=$1 [R=302,L,QSA,NE], případně k odkazům jsou již existující parametry, je tedy možné že je chyba v ?, které by v případě již existujících parametrů v URL mělo být &?

Díky moc!
Kajman
Profil
Ikki:
Vždy skončí stránka chybou 404

A co je v url? Pokud se nezmění, tak si ověřte, že máte zapnutý .htaccess a tam povolený mod_rewrite, např.
Řešení některých častějších problémů (FAQ) » Kterak ověřit, zda je rewrite povoleno a zapnuto

Zachování původní parametrů v query_stringu včetně & zařídí flag QSA.

Nemáte tam jiná pravidla?
Ikki
Profil
Omlouvám se, chtěl jsem zaslat v předchozí zprávě i aktuální .htaccess. Je to využito na Wordpress webu, tedy .htaccess určitě zapnutý je.
Adresa se nemění, proto mě napadlo zda tam například nechybí ten podparametr /produkt, když je adresa "/en/produkt/earrings-baroque-2"

# BEGIN WordPress
# Direktivy (řádky) mezi "BEGIN WordPress" a "END WordPress" jsou
# dynamicky generované a měly by být upravovány pouze pomocí filtrů WordPressu.
# Veškeré změny směrnic mezi těmito značkami budou přepsány.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^cs/wp-login.php /wp-login.php [QSA,L]
RewriteRule ^en/wp-login.php /wp-login.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^/?(en)/(.*)$ $2?lang=$1 [R=302,L,QSA,NE]
</IfModule>

# END WordPress

Díky!
Kajman
Profil
Nové přesměrování samozřejmě musí být na začátku (raději ale až po RewriteBase). Než se to k němu dostane, tak ostatní pravidla cestu změní a už nezačíná na en.
Ikki
Profil
Bohužel ať to umístím kamkoliv, tak přesměrování nefunguje. Zkoušel jsem zaslaný kód dát i mimo Ifmodule, pod RewriteBase i nad něj a bohužel.
Kajman
Profil
Takže, když na začátek .htaccess dáte
Řešení některých častějších problémů (FAQ) » Kterak ověřit, zda je rewrite povoleno a zapnuto
tak se to přesměruje, ale když tam dáte [#2], tak to nic neudělá?
Ikki
Profil
Přesně tak
Kajman
Profil
Kdyby nepřesměroval žádný z kódu, tak bych ještě nápad měl, když se při zadání adresy /en/produkt/1 nepřesměruje jen [#2] a ten druhý ano, tak nedokážu poradit.
Ikki
Profil
Našel jsem na internetu toto, ale jelikož .htaccess příliš nerozumím, myslíte, že by mi to mohlo pomoci?
RewriteCond %{REQUEST_URI} en
RewriteRule ^ https://web.com%{REQUEST_URI}?lang=en [QSA,R=301,END]

Když použiji toto, adresy CSS se změní, ale web se nikam nepřesměruje.

Případně neexistuje varianta jak vypsat kam dané pravidlo směřuje, případně jinak zjistit proč to nefunguje?
Kajman
Profil
Ikki:
Případně neexistuje varianta jak vypsat kam dané pravidlo směřuje, případně jinak zjistit proč to nefunguje?
httpd.apache.org/docs/current/mod/mod_rewrite.html#logging

Edit: kdyby se to nedařilo, tak zkuste ještě na začátku toto
#pouze pro test! (jakykoli pozadavek presmeruje na tuto diskuzi)
RewriteEngine On
RewriteRule ^(.*)$   https://www.jakpsatweb.cz/?url=$1 [L]
a napište, kam se to přesměrovalo z té /en/produkt/1 adresy
Ikki
Profil
Děkuji za odkaz a kód.
Kód přesměruje na ?url=index.php, což jestli chápu správně, tak wordpress produkt zobrazuje formou indexu a tvoří fake link?
Kajman
Profil
Jasně, jen tam musí být ještě nějaké podstrčení před tím přesměrováním. Zdroj podstrčení by měl být vidět v tom logu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0