logo
30.10.2019 01:16
1
Ahoj,

mohl by mi někdo poradit se správným nastavením .htaccess pro přepsání starých url na nové?

např. Potřebuji přepsat /cz/reservation na /cz/kontakt ale výsledek je následující /cz/kontakt?page=cz/reservation

.httaccess
Kód:
RewriteEngine on
Options -Indexes

# Add www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#pokud je to zanorene v nejakem adresari, uvedte ho za /
RewriteBase /   
        
# Remove index.php?page=
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{QUERY_STRING} ^page=([^&]+)
RewriteRule ^/?index\.php$ http://%{HTTP_HOST}/%1? [L,R=301]

# Redirection
RewriteRule ^/cz/reservation$ /cz/kontakt [L,R=301]
#Redirect 301 /cz/reservation /cz/kontakt

#Ignor the real folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Exclude URLs
RewriteCond %{REQUEST_URI} !^/sitemap.xml$

RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
Díky moc
P.

Co se právě děje na Webtrhu?

30.10.2019 12:58
2
No ja bych to zkusil

# redirects:

<IfModule mod_alias.c>

Redirect 301 /cz/reservation https://www.domena.cz/cz/kontakt

</IfModule>

nebo to takto aspon delam ja
30.10.2019 13:16
3
Zkus prohodit pravidla
Kód:
RewriteEngine on
Options -Indexes

# Add www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#pokud je to zanorene v nejakem adresari, uvedte ho za /
RewriteBase /   

# Redirection
RewriteRule ^/cz/reservation$ /cz/kontakt [L,R=301]
#Redirect 301 /cz/reservation /cz/kontakt
        
# Remove index.php?page=
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{QUERY_STRING} ^page=([^&]+)
RewriteRule ^/?index\.php$ http://%{HTTP_HOST}/%1? [L,R=301]


#Ignor the real folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Exclude URLs
RewriteCond %{REQUEST_URI} !^/sitemap.xml$

RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
30.10.2019 15:28
4
Díky za reakce... obojí jsem již zkoušel, ale stále stejný výsledek... :(
30.10.2019 16:11
5
odstraň úvodní lomítko, není součástí requestu, který se matchuje, tj.

Kód:
RewriteRule ^cz/reservation$ /cz/kontakt [L,R=301]
Pozor, ale např. u REQUEST_URI (použité s sitemap.xml) je uvedeno správně, kdyby tě napadlo tohle také přepsat. Je to tím, že používáš pravidlo přímo v RewriteRule. Aby, se ti to do budoucna nepletlo, můžeš tohle přesměrování přepsat na stejnou syntaxi jako u sitemap:

Kód:
RewriteCond %{REQUEST_URI} ^/cz/reservation$
RewriteRule .* /cz/kontakt [L,R=301]
30.10.2019 16:44
6
Super, bez lomítka to funguje tak jak má. Taková hloupost.
Díky moc