.htaccess Apache2强制删除.php或.html

.htaccess Apache2强制删除.php或.html,.htaccess,apache2,.htaccess,Apache2,我花了几个小时研究如何将所有.php文件重定向到没有.php的文件 我知道肯定有一个快速的答案,但我真的很难找到它 如果有人加载mysite.com/mysubfolder/mysecondsub/myfile.php到mysite.com/mysubfolder/mysecondsub/myfile,我怎么说呢 与普通重写一样,除了URL之外,PHP重定向到没有PHP扩展的URL (如果可能,使用.htaccess并重写mod_) 我将Apache2.conf配置为允许覆盖,以便能够使用.ht

我花了几个小时研究如何将所有.php文件重定向到没有.php的文件

我知道肯定有一个快速的答案,但我真的很难找到它

如果有人加载
mysite.com/mysubfolder/mysecondsub/myfile.php
mysite.com/mysubfolder/mysecondsub/myfile
,我怎么说呢

与普通重写一样,除了URL之外,PHP重定向到没有PHP扩展的URL

(如果可能,使用.htaccess并重写mod_)

我将Apache2.conf配置为允许覆盖,以便能够使用.htacess

当我使用类似于这篇文章的东西时,它就起作用了


但问题是,如果我写mysite.com/url,它可以工作,但如果我写mysite.com/url.php,它不会重定向到mysite/url(这是我想要的)。我尝试了一些解决方案,但仍然不知道…

这可能是您正在寻找的:

RewriteEngine on

RewriteRule ^/?(.+)\.php$ /$1 [R=301]

RewriteCond %{REQUEST_URI} !\.php$
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?(.+)$ /$1.php [END]
一开始使用302临时重定向是一个好主意,在确定所有设置都正确后,只需将其更改为301永久重定向。这样可以防止在尝试时出现缓存问题

如果您使用上述规则收到一个内部服务器错误(http状态500),那么很可能您操作的是非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到不支持的
[END]
标志的明确提示。您可以尝试升级或使用较旧的
[L]
标志,在这种情况下可能也会使用相同的标志,不过这取决于您的设置

此实现将在http服务器主机配置或分布式配置文件(“.htaccess”文件)中同样工作。显然,重写模块需要在http服务器中加载,并在http主机中启用。在使用分布式配置文件的情况下,您需要注意在主机配置中启用该文件的解释,并且该文件位于主机的
DOCUMENT\u ROOT
文件夹中


还有一个一般性的注释:您应该总是更喜欢将这些规则放在http服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。这些分布式配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实降低了http服务器的速度。只有在您无法访问真正的http服务器主机配置(读:真正廉价的服务提供商)或坚持编写自己的规则的应用程序(这显然是一个安全噩梦)的情况下,才提供它们作为最后一个选项

仅仅在这里,就有成千上万的答案。你希望这个问题的答案是什么?另一个答案是重复已经经常写的内容和你已经能读到的内容?如果你想要一个能帮助你解决问题的答案,你需要提供更多的信息。您实际尝试了什么(请输入代码!),尝试时发生了什么(请精确!),您的环境中还有哪些其他相关设置(您如何确保您的htaccess文件被真正考虑?)…我所要求的正是完美的!非常感谢你的帮助。很好,很高兴听到我能帮忙。还有一个提示:注意实际理解指令,不要只是复制你在互联网上找到的东西。我发布的所有内容都已经在这里的数百个答案上展示了,而且在重写模块的文档中也有展示。。。