htaccess 404 ошибка в языковой подпапке (en /)

У меня есть следующая структура:

/
/about.php
/contact.php
/en/
/en/about.php
/en/contact.php

И я хочу удалить расширение .php и префикс www из URL-адресов, а также принудительно установить https.

Теперь у меня есть следующий htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

Заранее благодарю за любую помощь!

0

Решение

Вы действительно близко, насколько у вас есть. Теперь, когда я знаю проблему, я дам вам то, что я использую — вам нужно условие, которое говорит это не каталог — И синтаксис !-d

Вот как мой Htaccess выглядит (потому что я использую его для удаления html так же как php:

RewriteEngine on

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

# Start php extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# End php extension remove

# Start html extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
# End html extension remove

Как вы можете видеть первый состояние проверяет, что это не каталог. Следующие состояние проверяет, является ли это расширение файла .php, Если оба условия правдаправило это удалить расширение.

Как примечание — я бы сделал ваш синтаксис немного чище и отделил «разделы» того, что вы пытаетесь сделать.

ОБНОВЛЕНИЕ КАК КОММЕНТАРИЙ

Удалить https принуждение — просто закомментируйте первый состояние и изменить https в http в правило:

RewriteEngine on

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

# Start php extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# End php extension remove

# Start html extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
# End html extension remove
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]