apache — httpd.conf mod_rewrite HTTPS и удалите расширение PHP

Я застрял на этом целую вечность.
Я не могу заставить httpd.conf переписать URL-адреса, чтобы добавить https (если он не используется) и удалить расширение .php.
Я могу заставить либо работать, но не оба одновременно. https://example.com/index выдает ошибку 404, когда index.php существует.

Итак, что я пытаюсь сделать, это превратить URL-адреса, такие как example.com/index.php в https://example.com/index

Если я отключаю правило силы HTTPS, оно работает.
httpd.conf:

RewriteEngine On
RewriteRule ^(.*)$  $1.php  [QSA]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteRule $ https://example.com/ [L,R]
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* – [F,L]

Я добавил несколько правил, таких как:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L]

А также:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([A-Za-z0-9\-]+/)*[A-Za-z0-9\-]+)?$ $1.php

Но безрезультатно.

Любая помощь будет отличной.

3

Решение

Это должно работать как ожидалось.

Для тебя http блок

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^/(.*)$ /$1.php [L,QSA]

RewriteCond %{HTTP_USER_AGENT} libwww-perl
RewriteRule ^ – [F]

Для тебя https (ssl) блок

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^/(.*)$ /$1.php [L,QSA]

RewriteCond %{HTTP_USER_AGENT} libwww-perl
RewriteRule ^ – [F]

Примечание: я предлагаю вам использовать htaccess в корневой папке (корневая папка документа ssl должна совпадать с доменом «http»). Таким образом, у вас не будет разделенного / дублированного кода

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]