Как я могу иметь это в своем htaccess:
/page.php => redirects to /page
/page => shows the page.php
/index => redirects to root
И как удалить конечные косые черты со всех URL-адресов, особенно с корневого?
Хотя я недостаточно знаком с конфигами Apache, но смог найти вот такие коды:
# To remove .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
# To remove trailing slashes
RewriteRule ^(.*)/$ /$1 [L,R=301]
# To redirect /index to root (not sure if it works correctly)
RewriteCond %{THE_REQUEST} ^.*/index
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
Не могли бы вы помочь мне со сценарием и сделать его одним небольшим кодом?
Спасибо
Согласно ответам, я мог решить проблему, используя приведенные ниже коды в моем файле .htaccess:
# To remove .php extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\ (.*)\.php [NC]
RewriteRule ^ %1 [R=301,L]
# To remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]
# To check whether the file exists then set it back internally
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]
# To redirect /index to root
RewriteCond %{THE_REQUEST} ^.*/index
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
Теперь у меня возникла новая проблема, и это когда я просматриваю файлы с косой чертой в конце, он перенаправляет меня куда-то еще и выдает ответ 404 (страница не найдена), например:
http://domain.tld/page/ => http://domain.tld/page/home/user/public_html/domain.tld/page
Также, если я передвигаю вторую часть в конец или вообще удаляю ее, сервер присылает мне ответ 500 (внутренняя ошибка сервера).
Наконец, проведя небольшое исследование, я смог найти решение предыдущей проблемы, используя этот совет:
https://stackoverflow.com/a/27264788/5420319
Итак, я изменил один из кодов:
# To remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]
К этому:
# To remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.*)/$
RewriteRule ^ /%1 [R=301,L]
И я также переместил эту часть наверх, несмотря на то, что она эффективна.