Мод переписать, чтобы удалить расширение файла, добавить косую черту, удалить www и перенаправить на 404, если файл / каталог не доступен

Я хотел бы создать правила перезаписи в моем файле .htaccess, чтобы сделать следующее:

При доступе через domain.com/abc.php: удалите расширение файла, добавьте косую черту и загрузите файл abc.php. URL должен выглядеть следующим образом после перезаписи: domain.com/abc/

При доступе через domain.com/abc/: оставьте URL как есть и загрузите abc.php

При доступе через domain.com/abc: добавьте косую черту и загрузите abc.php. URL должен выглядеть следующим образом после перезаписи: domain.com/abc/

Удалить www

Перенаправить на страницу 404 (404.php), когда URL-адрес, к которому осуществляется доступ, не разрешается в папку или файл, например при доступе либо к domain.com/nothingthere.php, либо domain.com/nothingthere/, либо к domain.com/nothingthere

Сделайте несколько постоянных перенаправлений 301 со старых URL-адресов на новые (например, domain.com/abc.html to domain.com/abc/)

Все php-файлы находятся в корневом каталоге документа, но если есть решение, которое сделает URL-адреса, такие как domain.com/abc/def/ (загрузит domain.com/abc/def.php), также хорошо, то будет хорошо, но не обязательно

Итак, вот что я имею в данный момент (собранные из различных источников и примеров со всего Интернета

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  # redirect from www to non-www
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

  # remove php file extension
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
  RewriteRule (.*)\.php$ /$1/ [L,R=301]

  # add trailing slash
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^.*[^/]$ /$0/ [L,R=301]

  # resolve urls to matching php files 
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule (.*)/$ $1.php [L]

При этом, похоже, срабатывают первые четыре требования, независимо от того, введу ли я domain.com/abc.php, domain.com/abc/ или domain.com/abc, окончательным URL всегда будет domain.com/abc/ и domain. com / abc.php загружен.

Когда я ввожу URL, который разрешается в файл, который не существует, я получаю ошибку 310 (цикл перенаправления), когда действительно должна быть загружена страница 404. Кроме того, я не пробовал, работают ли подпапки, но, как я уже сказал, это низкий приоритет. Я почти уверен, что могу просто добавить в список постоянные редиректы 301 устаревшие URL-адреса и без каких-либо проблем, просто хотел упомянуть об этом. Таким образом, реальная проблема - действительно нерабочая страница 404.

Ответы на вопрос(4)

Ваш ответ на вопрос