.htaccess在存在php或html文件的情况下交付资源

.htaccess在存在php或html文件的情况下交付资源,.htaccess,.htaccess,我的任务是将一个遗留站点迁移到一个新的宿主,同时在那里放置一个新网站。使用archive.domain.tld仍然可以访问旧的旧站点 旧式网站上的链接看起来要么像这样:/foo/bar/baz.php要么像/foo/bar/baz.html,但也有很多链接看起来像/foo/bar/baz。它表明,旧的提供者在其apache配置中有某种规则,首先查看资源是否存在,如果不存在,则在添加.php时查看资源是否存在,如果不存在,则在添加.html时查看资源是否存在 我想归档的是同样的行为。 请求http

我的任务是将一个遗留站点迁移到一个新的宿主,同时在那里放置一个新网站。使用archive.domain.tld仍然可以访问旧的旧站点

旧式网站上的链接看起来要么像这样:
/foo/bar/baz.php
要么像
/foo/bar/baz.html
,但也有很多链接看起来像
/foo/bar/baz
。它表明,旧的提供者在其apache配置中有某种规则,首先查看资源是否存在,如果不存在,则在添加
.php
时查看资源是否存在,如果不存在,则在添加
.html
时查看资源是否存在

我想归档的是同样的行为。 请求
https://archive.domain.tld/foo/bar/baz

  • 检查/foo/bar/baz是否是一个文件,如果是,则交付它
  • 检查/foo/bar/baz.php是否是一个文件,如果是,则交付它
  • 检查/foo/bar/baz.html是否是一个文件,如果是,则交付它

  • 我知道,我可以像Symfony那样将所有流量重写为一个
    .php
    文件,但如何使用
    .htaccess
    文件实现此“路由”

    您可以在Apache配置或根目录中使用这些规则。htaccess:

    RewriteEngine On
    
    # skip all files and directories from rewrite rules below
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    
    # .php extension
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)/?$ $1.php [L]
    
    # .html extension
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+?)/?$ $1.html [L]
    

    完美,正是我想要的!(我以前有一个更难看的解决方案“有效”,但这正是我一直在寻找的!)编辑:必须再等6分钟才能接受你的答案。我还建议保留这些规则和评论,以便网站管理员知道每个规则在做什么。