【问题标题】:Remove .php extension is not working删除 .php 扩展名不起作用
【发布时间】:2013-11-05 06:10:35
【问题描述】:

我发现了很多关于删除 URL 中的 .php 扩展名的教程和问题。我已经尝试了很多示例,直到现在它仍然无法正常工作。这让我发疯。我还想在 URL 的末尾加上斜杠,但首先我想先实现这一点。目前我已经尝试过这是我的一些解决方案:

Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]

还有这个:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

没有什么是好的。我正在使用 Windows 7 和 XAMPP 在我的笔记本电脑上工作。我只是创建了我的 .htaccess 文件并将其放在 localhost/myFolder 中。当我在浏览器中运行时,根据我的解决方案,(i)有时我找不到页面,(ii)有时服务器内部错误。此外,当我运行例如 localhost/myFolder/index 时,URL 将被重定向到没有 myFolder 的 localhost/index。我想知道为什么会发生这种情况,并希望有人可以给我链接或解决方案,因为我尝试了很多。提前谢谢你。

【问题讨论】:

  • RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L, QSA] 请试试这个
  • @KristerAndersson 谢谢,对不起,我不明白 RewriteCond Backreference 部分,你能举个例子吗?我是新手。
  • @Asif 我的示例出现服务器错误。
  • RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 它看起来像 yoursite.com/test.php 到 yoursite .com/test
  • @Asif 谢谢但还是同样的问题,它将我重定向到 localhost/index 而不是 localhost/myFolder/index。即使我手动放置“myFolder”,页面显示页面未找到。

标签: php html apache .htaccess mod-rewrite


【解决方案1】:

以下对我来说很好用:

RewriteEngine On
RewriteBase /myFolder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*[^/])/?$ $1.php [L]

【讨论】:

  • 谢谢,但还是不行。它将我重定向到 localhost/page 而不是 localhost/myFolder/page。现在我想知道我应该把 .htaccess 文件放在哪里。我真的不知道是什么问题。
  • 您是否取消了RewriteBase 的注释?将 .htaccess 文件放入您的 myFolder 目录中。
  • 是的,我已取消注释并放入 myFolder 目录。奇怪的是它不起作用。
  • 哇,像魅力一样工作!非常感谢,我猜是这个问题。我重新启动我的笔记本电脑并运行 CCleaner,放置您的代码并对其进行测试,效果很好!如果您不介意,如何添加斜杠并在 URL 中添加 GET 变量?谢谢。
  • 谢谢,我不在我的笔记本电脑前,所以我还不能尝试,稍后再试并更新你。我有一些问题,为什么 .htaccess 会影响缓存?另外,如果我的网络服务器运行 Windows / Linux,这在两种环境中都可以工作吗?
【解决方案2】:

尝试在 /myFolder/.htaccess 中隐藏 .php 扩展程序的代码:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/myFolder/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

【讨论】:

  • 感谢您的解决方案,它对我不起作用。我可以看到 URL 是好的“localhost/myFolder/page”,但找不到该页面。我使用了 Krister Andersson 解决方案。再次感谢您。
  • 您只能使用 1 个规则而不是多个。在您的问题中发布您的完整 .htaccess。
【解决方案3】:

解决您的问题:

Options +MultiViews
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/myFolder/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

我刚刚替换了您的- 登录multiviews,它开始在我的本地主机上运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多