1

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

  1. 将 .html 文件重定向到它们的 .php 等价物

  2. 从所有 url 中删除 .php 扩展名

  3. 无扩展 url 应该可以工作(例如,foo.com/bar 应该显示位于 foo.com/bar.php 的页面)

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

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 页面)

  2. 虽然对 .html 文件的请求确实显示了正确的 .php 页面,但 .html 扩展名仍然存在(我不希望显示扩展名)

  3. 现在无法在 url 中不包含 index.php 的情况下访问目录(例如,foo.com/bar/ 会引发 404 错误)

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

4

1 回答 1

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]
于 2013-02-04T17:59:59.587 回答