【问题标题】:Replace .php in URL with / using .htaccess使用 .htaccess 将 URL 中的 .php 替换为 /
【发布时间】:2014-08-12 08:50:19
【问题描述】:

我整天都在寻找一种解决方案,用 .htaccess 将 URL 中的 .php 替换为 /。大多数解决方案根本不适合我(没有重写 URL,甚至只是删除 .php),直到我在 SO 上找到了这个漂亮的解决方案。

https://stackoverflow.com/a/11084526/1724376

现在我的问题是它只删除了 .php 但没有用“/”替换它。我尝试了很多没有运气的事情,但我对htaccess和重写条件等了解不多。我真的希望这里有人可以帮助我。

为了避免因为没有尝试任何东西而被否决,这是我尝试过的一个,但它根本没有重写 URL。

RewriteCond /%{REQUEST_FILENAME}.php -f
RewriteRule ^([a-zA-Z0-9_-\s]+)/$ /$1.php

我们将不胜感激。

编辑:澄清一下,我希望 www.mysite.com/contact.php 显示为 www.mysite.com/contact/

【问题讨论】:

  • 很多人忽略了这样一个事实,即您可以使用 mod_rewrite 设置两种基本类型的规则;通常,你想要两者。一种类型将漂亮的 URL 输入浏览器,然后计算应该提供的丑陋版本,但对浏览器完全不可见;另一种类型采用旧的丑陋 URL,并 告诉浏览器 转到漂亮的 URL。第二种类型仅在您使用第一种类型时才有用。您在此处发布的规则是第一种类型 - 如果您转到以 / 结尾的 URL,它将尝试提供 PHP 文件,但它不会以任何方式重定向浏览器。跨度>
  • 谢谢,是的,这是有道理的。我猜那些带有 [R=301] 的人会进行 301 重定向。这导致我尝试 RewriteRule (.*)\.php$ $1/ [R=301] 但当然这不起作用,因为当我尝试访问 example.com/test/ 时不存在 example.com/test .php。仍在寻找解决方案,但至少这引发了更多想法:)
  • 是的,[R=301] 表示 301 HTTP 重定向;如果没有[R] 标志,重写是内部的,你会经常看到[L],意思是“最后一个”,以停止两个规则同时触发(它们是按顺序处理的,所以另一个选项是要小心如何你列出它们)。您说“当然 ... example.com/test/ 不存在”-这就是您在此处粘贴的规则的重点,以使该 URL 存在。我的建议:如果您首先直接链接到“漂亮”的 URL,则让它们正常工作,然后担心如果他们访问“旧”/“丑陋”的 URL,则会重定向他们的浏览器。
  • 使 URL 存在正是我想要避免的。那是几天的工作,然后重新测试整个站点以确保一切正常。我希望 htaccess 能成为这里的解决方案。我需要做的就是让 example.com/test.php 可以作为 example.com/test/ 访问,原因有两个 - 1)漂亮的 URL,2)混淆的安全性(我知道这不好,但它可以'不疼)。
  • 我很困惑:“使 URL 存在”和“让 example.com/test.php 可以作为 example.com/test/ 访问”是一回事!如果您可以访问example.com/test/,它就存在(就浏览器而言)。然后你可以做任何你喜欢告诉浏览器加载该页面的事情(例如,从“旧” URL 放置 301 重定向)。

标签: regex apache .htaccess mod-rewrite


【解决方案1】:

你的规则是这样的:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1/ [R=302,L,NE]

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

【讨论】:

  • 嗨,阿努巴瓦。谢谢回复。我试过了,它仍然只从 URL 中删除 .php,但不附加斜杠。我想知道我的服务器配置是否有什么不同。
  • 它确实将斜线放在最后,您需要在新浏览器中测试以避免301缓存问题。另外,您确定没有其他规则删除斜杠吗?
  • 我的整个 htaccess 就是你所拥有的,所以没有其他东西可以删除训练斜线。我再次尝试,清除缓存和临时 Internet 文件并尝试 IE 而不是 Chrome,结果相同 :( 你可以在 depts (d0t) org 看到它的运行情况
  • 当我发送http://depts.org/news.php 的请求时,它变成了http://depts.org/news/,最后带有斜杠。
  • 谢谢,是的,这是一个很好的观点。这是一个开发环境,所以我避免使用它,但接下来将使用 PHP 变量对其进行更新,以便于更新。
猜你喜欢
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多