httpd.conf mod_rewrite HTTPS并删除PHP扩展

时间:2015-04-21 19:28:32

标签: php apache mod-rewrite https httpd.conf

我已经坚持了很久。 我似乎无法让httpd.conf重写URL以添加https(如果它没有被使用)并删除.php扩展名。 我既可以上班也可以不同时上班。当index.php存在时,https://example.com/index会出现404错误。

所以我要做的是将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

但无济于事。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:2)

这应该按预期工作。

对于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”域相同)。这样,您就不会有拆分/重复代码