Индекс перезаписи URL (.htaccess). php? Page = foo & lang = en to / en / foo - PullRequest
0 голосов
/ 21 марта 2020

Я новичок в перезаписи URL с использованием .htaccess, и я борюсь с ним.

Я хочу изменить URL-адрес, аналогичный этому http://www.example.org/index.php?page=contact&lang=en (lang имеет 3 варианта, в то время как значение страницы изменяется в зависимости от текущей страницы), например - на https://example.org/en/contact - не www and https версия).

Также, если кто-то посещает https://example.org/ Я хочу перенаправить их на https://example.org/en (по умолчанию)

Пока это то, что у меня есть. htaccess и он не работает должным образом.

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^\w+$ index.php?page=$0&lang=$1 [L]

RewriteCond %{THE_REQUEST} index\.php
RewriteCond %{QUERY_STRING} ^page=(\w+)(&lang=en)?$
RewriteRule ^index\.php$ /%1? [R=301,L]

Ответы [ 2 ]

1 голос
/ 21 марта 2020
RewriteEngine On

#1
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

#2
RewriteRule ^/?$ https://%{HTTP_HOST}/en? [R=301,L]

#3
RewriteCond %{REQUEST_URI} index\.php
RewriteCond %{QUERY_STRING} ^page=(\w+)&lang=(\w+)$
RewriteRule "(.*)" "https://%{HTTP_HOST}/%2/%1?" [R=301,L]

Пояснение

Блок 1

Обрабатывает все запросы без https или с www.

http://www.example.org/whatever => https://example.org/whatever

Блок 2

Обрабатывает root / запросов и добавляет en в качестве языка по умолчанию

https://example.org/ => https://example.org/en

Блок 3

Обрабатывает индекс. php? Page = x & lang = x Запрашивает и заменяет параметры запроса сегментами пути

https://example.org/index.php?page=contact&lang=en => https://example.org/en/contact

Все 3 вместе должны соответствовать вашим требованиям

http://www.example.org/index.php?page=contact&lang=en => https://example.org/en/contact

1 голос
/ 21 марта 2020

Вот .htaccess, который соответствует вашим потребностям

RewriteEngine On

RewriteCond %{REQUEST_URI} ^(\/index\.php)?
RewriteRule (.*) https://%{HTTP_HOST}/en?

RewriteCond %{REQUEST_URI} ^(\/index\.php)?
RewriteCond %{QUERY_STRING} page=(\w+)&lang=(\w+)
RewriteRule (.*) https://%{HTTP_HOST}/%1/%2?

Пояснение

Первое условие и правило

RewriteCond %{REQUEST_URI} ^(\/index\.php)?
RewriteRule (.*) https://%{HTTP_HOST}/en?

будут перенаправьте следующие URL-адреса на http://www.example.org/en

http://www.example.org
http://www.example.org/
http://www.example.org/index.php

Вторые условия и правило

RewriteCond %{REQUEST_URI} ^(\/index\.php)?
RewriteCond %{QUERY_STRING} page=(\w+)&lang=(\w+)
RewriteRule (.*) https://%{HTTP_HOST}/%1/%2?

перенаправят следующие URL-адреса на http://www.example.org/contact/en `

http://www.example.org/index.php?page=contact&lang=en
http://www.example.org/?page=contact&lang=en
http://www.example.org?page=contact&lang=en

измените contact и en с другими значениями, чтобы увидеть изменения

Вот пример Live

...