htaccess删除.php扩展名并重写为www

时间:2016-11-19 18:21:35

标签: apache .htaccess mod-rewrite url-rewriting

我试图在位于我的根目录中的htaccess中完成2件事,并且应该影响我网站中的所有网页。我正在使用Apache 2.4。

1)将非www重写为www(此部分目前正在工作)

2)从网址

中删除.php扩展名

对于#2,我找到了两个关于此的线程但是当试图用#1的代码实现它时,它似乎永远不会起作用。

Remove .php extension with .htaccess

How to hide the .html extension with Apache mod_rewrite

这是我的代码,第一部分工作正常,但第二部分似乎没有为我做任何事情" .php"仍显示在所有网址上。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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

我也查看了这个帖子并尝试了以下内容,但仍无效。

5 .htaccess Rewrites: Force HTTPS, Remove index.php, Remove .php, Force www, Force Trailing Slash

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.(?!js|css)([^.]*)$ $1\.php

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

任何帮助将不胜感激。提前谢谢。

已更新

这是文件夹结构以及PHP代码所在的位置。大多数php文件都在根文件夹中,但还有两个包含PHP代码的附加文件夹。

/
index.php
file1.php
file2.php
file3.php
file4.php
folder1/file5.php
folder1/file6.php
folder2/file7.php
folder2/file8.php

1 个答案:

答案 0 :(得分:1)

您可以使用:

RewriteEngine On
Options -MultiViews

# Redirect to http(s)://www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# remove php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

# Rewrite to php
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+)/?$ /$1.php [L]