У меня есть следующая структура:
/
/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]
Заранее благодарю за любую помощь!
Вы действительно близко, насколько у вас есть. Теперь, когда я знаю проблему, я дам вам то, что я использую — вам нужно условие, которое говорит это не каталог — И синтаксис !-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
Других решений пока нет …