Я хотел бы создать правила перезаписи в моем файле .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 на 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/ и домен.com/abc.php загружен.
Когда я ввожу URL, который разрешается в файл, который не существует, я получаю ошибку 310 (цикл перенаправления), когда действительно должна быть загружена страница 404. Кроме того, я не пробовал, работают ли подпапки, но, как я уже сказал, это низкий приоритет. Я почти уверен, что могу просто добавить в список постоянные редиректы 301 устаревшие URL-адреса и без каких-либо проблем, просто хотел упомянуть об этом. Таким образом, настоящая проблема - это действительно нерабочая страница 404.