.htaccess 重写URL以不包含文件扩展名

.htaccess 重写URL以不包含文件扩展名,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,这是一个反复出现的问题。关于这一点也有类似的问题,但没有什么能完全回答我的问题 我有一个网站,我希望每一个网页只能在一个网址。它应该在所有页面上动态工作,而不是在单一硬编码文件名上 domain.tld/foo应重定向到domain.tld/foo/ domain.tld/foo.php应该重定向到domain.tld/foo/ domain.tld/foo/应该给用户(但不是重定向到)domain.tld/foo.php 1和3不太难,但如果不引入循环引用,并且重定向太多而失败,我就无法理解2

这是一个反复出现的问题。关于这一点也有类似的问题,但没有什么能完全回答我的问题

我有一个网站,我希望每一个网页只能在一个网址。它应该在所有页面上动态工作,而不是在单一硬编码文件名上

  • domain.tld/foo
    应重定向到
    domain.tld/foo/
  • domain.tld/foo.php
    应该重定向到
    domain.tld/foo/
  • domain.tld/foo/
    应该给用户(但不是重定向到)
    domain.tld/foo.php
  • 1和3不太难,但如果不引入循环引用,并且重定向太多而失败,我就无法理解2。我怎样才能做到这一点呢?

    重写#1由

    DirectorySlash on
    
    这应该是默认的

    对于#2和#3:

    重写#1由

    DirectorySlash on
    
    这应该是默认的

    对于#2和#3:


    如果我的理解正确的话,你的问题与我在这里发帖时不得不面对的问题相似


    虽然我们无法找到完全解决问题的答案,但其中的一些答复可能对您有所帮助。

    如果我的理解正确,您的问题与我在此处发布问题时所面临的问题类似

    尽管我们无法找到完全解决问题的答案,但其中的一些答复可能对您有所帮助。

    尝试以下三条规则:

    RewriteCond %{THE_REQUEST} ^GET\s/[^?\s]+\.php[?\s]
    RewriteRule (.+)\.php$ /$1/ [L,R=301]
    RewriteCond $0 !.+\.php$
    RewriteRule (.*[^/])$ /$1/ [L,R=301]
    RewriteRule (.+)/$ $1.php [L]
    
    要排除任何其他现有文件,请将此规则置于其他规则之前:

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule !.+\.php$ - [L]
    
    试试以下三条规则:

    RewriteCond %{THE_REQUEST} ^GET\s/[^?\s]+\.php[?\s]
    RewriteRule (.+)\.php$ /$1/ [L,R=301]
    RewriteCond $0 !.+\.php$
    RewriteRule (.*[^/])$ /$1/ [L,R=301]
    RewriteRule (.+)/$ $1.php [L]
    
    要排除任何其他现有文件,请将此规则置于其他规则之前:

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

    谢谢,但这会将所有URL重写为
    foo.php/
    。它们都指向同一个位置,这很好,但我想去掉
    .php
    。我还在修补它。谢谢,但这会将所有URL重写为
    foo.php/
    。它们都指向同一个位置,这很好,但我想去掉
    .php
    。我还在修补它。
    DirectorySlash
    很好,谢谢你。其余部分为
    foo/bar/
    foo/bar.php
    提供了无限的重定向,而
    foo/bar
    导致了
    foo
    。嗯,我从一个问题开始就认为您希望单组件URL使用此重定向。
    directorysslash
    很好,谢谢。其余部分为
    foo/bar/
    foo/bar.php
    提供了无限的重定向,而
    foo/bar
    导致了
    foo
    .Hm,我从问题中想到,您希望单组件URL使用此重定向。