Ошибка htaccess 404 в языковой подпапке (en /) - PullRequest
0 голосов
/ 30 мая 2018

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

/  
/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]  

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

1 Ответ

0 голосов
/ 30 мая 2018

Ты действительно близко к тому, что у тебя есть.Теперь, когда я знаю проблему, я дам вам то, что я использую - вам нужно условие, которое говорит, что не является каталогом - И синтаксис: !-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. Если оба условия true - Правило чтобы удалить расширение.

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

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

Чтобы удалить форсирование 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
...