.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
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使用此重定向。