【问题标题】:htaccess change .html to .php from all files inside folderhtaccess 从文件夹内的所有文件中将 .html 更改为 .php
【发布时间】:2015-02-28 21:28:08
【问题描述】:

所以我在我的网站中有这个文件夹.. 我不得不将所有文件类型从 html 更改为 php 但在这个静态 html 中我有使用 html 作为扩展名的文件的链接...问题是我有 php现在。

是否可以为此文件夹编写 htaccess 规则,以便任何指向 .html 的链接都将变为 .php?

www.site.com/folder1/folder2/something.php 在something.php中我有一个链接:www.site.com/folder1/folder2/somethingelse.html(但现在实际上是.php),我还有数百个文件已更改为php

我尝试了很多规则,但我真的很菜鸟,我尝试过的最后一个是

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^website.net
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) http://www.website.net/folder1/folder2/$1 [R=301,L]

RewriteRule ^(.+)\.html$ http://www.website.net/folder1/folder2/$1.php [R=301,L]

但它不起作用! 请帮忙!

更新:MICHAELOKGB 的回答几乎没问题!剩下要做的就是将实际文件夹设置为 rewritebase:“/folder1/folder2/”,它的工作就像一个魅力!谢谢大家!!

【问题讨论】:

  • 你能比“不起作用”更详细吗?抛出 500,重定向到错误的页面等。

标签: php html apache .htaccess


【解决方案1】:

使用这个。我测试了它,它可以工作。

RewriteEngine on  
RewriteBase /

RewriteCond %{THE_REQUEST} folder1/folder2/(.*)\.php  
RewriteRule ^(.*)\.php $1.html [R=301,L]  

RewriteCond %{THE_REQUEST} folder1/folder2/(.*)\.html  
RewriteRule ^(.*)\.html $1.php [L] 

编辑:忘记仅添加特定文件夹。如果您删除 /folder1/folder2/,它将应用于整个网站。

Edit2:因此,通过响应,您似乎应该将重写基础从 /(整个站点)更改为实用文件夹。这很奇怪,因为我针对特定文件夹对其进行了测试并且它有效,但无论如何:

RewriteBase /folder1/folder2

【讨论】:

  • 如果您不知道文件的实际名称,您会怎么做?我的意思是我有很多链接,它们可能是 1.html 或 apple.html
  • 哎呀我很抱歉.. 我想 $1 是一种通配符
  • 没错。它获取该文件夹中具有 PHP 扩展名的任何文件,并将您重定向到 html 并加载原始文件的内容。通常(我上面的答案,已编辑的)如果你去file.php它会显示它的内容(无重定向),如果你去文件。 html,它将显示file.php的内容。此代码实际上将您从 file.php 重定向到 file.html :) 如果 Google 已经使用 php 扩展名索引文件,它对 SEO 更友好。
  • $1 不是通配符,'.'表示单个字符,与“*”(这是一个量词)配对它表示任意数量的字符,直到最后一次出现“.php”。 $1 是找到的值,括号捕获了它。请参阅此文档中的基本概念,en.wikipedia.org/wiki/Regular_expression 应该会解释更多,也许您将来可以修改。
  • (.*) 是一个“通配符”。它需要那里的任何东西,而 $1 是由 (.*) 匹配的任何东西,但代码有效:)
猜你喜欢
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2011-11-15
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多