删除.php扩展名,强制非斜杠,强制非www,强制https with .htaccess

时间:2017-09-19 14:27:42

标签: apache .htaccess redirect mod-rewrite

我现在已经研究了很长一段时间了,但我无法做到这一点。当我有一个部分工作(例如强制非PHP)时,另一部分停止工作(例如强制非斜杠)。

我想要的是什么:

  1. 删除.php扩展名(因此example.com/foo.php在浏览器网址栏中显示为example.com/foo
  2. 删除URL末尾的斜杠(所以example.com/foo.php/变为example.com/foo。但是当它是一个带有index.php的目录时,它必须相应地重定向(我无法得到这个)最后一部分工作)
  3. 强制非www(此作品)
  4. 强制https(此作品)
  5. 我的.htaccess现在看起来像什么:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+?)/$ /$1 [R=301,NE,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    
    RewriteCond %{HTTPS} !on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    RewriteCond %{HTTPS} off  
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
    

    我遇到以下问题:

    1. example.com/foo.php/重定向到example.com/foo.php而不是example.com/foo

    2. example.com/foo.php/foo显示example.com/foo.php文件,而example.com/foo/foo显示404消息(后者在我的情况下是正确的)

    3. example.com/admin(这是一个包含index.php的文件夹)显示404消息

    4. 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好的,所以我知道这是一个广泛的问题。但是,如果有人搜索过这个,我几乎拥有它(唯一不起作用的是将domain.com/foo.php/foo重定向到domain.com/foo/foo

这是我现在拥有的.htaccess文件:

RewriteEngine On

Options -Indexes

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /([^/]+)\.php(\?|\ |$)
RewriteRule ^ /%2 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ /$1 [R=301,NE,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

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

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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