将.html文件重定向到.php等效文件,不显示任何文件的.php扩展名

时间:2013-02-04 16:35:49

标签: apache .htaccess mod-rewrite redirect

我最近将我网站上的文件扩展名从.html切换到.php。因此,我想做以下事情:

  1. 将.html文件重定向到其.php等效文件

  2. 从所有网址

  3. 中删除.php扩展程序
  4. 无扩展网址应该有效(例如,foo.com/bar应显示位于foo.com/bar.php的网页)

  5. 这是我目前的方法,我从各种来源拼凑而成:

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

    我的方法至少有三个问题:

    1. 当有人试图访问foo.domain / bar.php时,.php扩展名仍然存在(但值得注意的是,foo.domain / bar 显示正确的.php页面)< / p>

    2. 当.html文件的请求显示正确的.php页面时,.html扩展名仍然存在(我不想展示扩展名)

    3. 现在无法在URL中包含index.php来访问目录(例如,foo.com / bar /会引发404错误)

    4. 一定要明显,我发现mod_rewrite真的很难。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我的头脑中

RewriteEngine On
RewriteBase /
Options -MultiViews

# redirect /foo.html to /foo
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)\.html$ $1 [L,R=302]

# redirect /foo.php to /foo
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^([^\.]+)\.php$ $1 [L,R=302]

# rewrite /foo to /foo.php if and only if /foo.php exists
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]