Apache 使用重定向从URL中删除.html

Apache 使用重定向从URL中删除.html,apache,.htaccess,magento,url-rewriting,Apache,.htaccess,Magento,Url Rewriting,我们有一个网站,不幸的是,所有的URL都有.html后缀,这是一个Magento安装,Magento允许你在CMS上更改这个,但同样不幸的是,所有带有.html后缀的URL在谷歌排名很好。我们需要重定向到非.html 这样,考虑下面的场景,我们从头开始重建这个站点,所以我们在新站点上有相同的URL,但是没有.html后缀。 现在是:www.example.de/cool shoes.html 将是:www.example.de/cool shoes 所以www.example.de/cool

我们有一个网站,不幸的是,所有的URL都有
.html
后缀,这是一个Magento安装,Magento允许你在CMS上更改这个,但同样不幸的是,所有带有
.html
后缀的URL在谷歌排名很好。我们需要重定向到非
.html

这样,考虑下面的场景,我们从头开始重建这个站点,所以我们在新站点上有相同的URL,但是没有.html后缀。

  • 现在是:
    www.example.de/cool shoes.html
  • 将是:
    www.example.de/cool shoes
所以
www.example.de/cool shoes.html
将不再存在,我一直在尝试使用.htaccess重定向,但运气不佳

到目前为止,我已经尝试过:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule (.*)index\.html$ /$1 [R=301,L] 
以及:


但它似乎不起作用……有什么想法吗?

这应该可以做到:

RewriteEngine On
RewriteRule ^(\w+)\.html$ /$1 [R=301,L]

遵循,您将能够从url中删除.html,而无需修改.htaccess文件

好的,经过一些研究,但用重写规则无法实现这一点,下面的代码行起作用了:

redirectMatch 301 ^(.*)\.html $1
这是非常有用的删除任何url扩展和避免断开的链接,希望有助于在未来的人


干杯

尝试将此文件放入.htaccess文件中 重定向永久网站www.mysite.de/cool-shoes.html www.mysite.de/cool-shoes
这可能对您有帮助

这将像这样重写url->


尝试将以下内容添加到站点根目录中的.htaccess文件中,重定向扩展名为.html的URL,然后将其删除

Options +FollowSymLinks -MultiViews
DirectorySlash Off

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME}/ -d
RewriteCond %{SCRIPT_FILENAME}.html !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.html$ /$1 [R=301,L]

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L]

这是对我有效的解决方案

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

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html [L]

这适用于以.html/product/raspberrypi.html-->/product/raspberrypi/(/product/raspberrypi/index.php)结尾的URL。index.php是隐藏的。我花了一段时间才弄明白。哈哈

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

您必须使用'REQUEST_URI'并将其添加到索引重定向规则之前,因为它可能被应用程序覆盖。重要的是要知道它的URI不是我们试图重定向的文件名或目录,因为文件名在根文件夹(Wordpress)中都有index.php

谢谢,但似乎没有什么变化,我知道我可以删除magento CMS上的前缀,但再见谷歌排名…w+是什么意思?我应该使用[R=301,NC]还是什么?它接受以.html结尾的任何请求(\w+匹配任何非空的字母数字字符串),并将其重定向到相同的地址,但不包含.html。我假设你想要别的东西,Vikas解决方案看起来像一个整洁的OneHanks伴侣,我认为你走的方向是正确的,Vikas解决方案很好,但正如我上面解释的,只有在URL存在的情况下,在这种情况下,这个URL(.html)将被删除,我希望每个人都被重定向到新的URL,而不使用.html。我正在编辑main.htaccess并在正确的位置添加了您建议的行,但是没有进行重定向,可能我在整个magento安装的main.htaccess文件中添加了这一行是错误的,我将尝试为此商店单独创建一个.htaccess(我有一个多跳安装)谢谢!此规则缺少告诉mod rewrite重定向而不是重写的
[R=301,L]
RewriteRule^(\w+)\.html$/$1[R=301,L]
应该可以工作。谢谢,只有当您的页面以前有.html后缀时,这才可以工作,但在这种情况下,这个带有.html的页面不存在。它确实存在于旧站点上,但不存在于新站点中,因此每次有人使用旧ulr(www.mysite.de/thing.html)时,都会被重定向到www.mysite.de/thing,而不是404 not found。我认为这可以通过htaccess实现,对吗?只有链接的答案不是高质量的。链接内容可能会更改或变得不可用。让人们点击答案也是不友好的。至少在这里总结一下这些步骤会更好。你好,我只是想澄清我的疑问,这个规则在做什么?第一个参数是您将从请求中接收的表达式,第二个参数是您将发送给apache的表达式,这一点不奇怪?应将它们切换为->^(.*)$1.HTMLTH规则正在删除
.html
。第一部分是它所匹配的内容:任何具有
.html
的url。
$1
是匹配的括号中的内容:除了
.html
之外的所有内容。我将添加一个
$
,以确保
.html
位于URL的末尾:
重定向匹配301^(.*)\.html$$1
此代码似乎添加了
.html
而不是删除它。它似乎也是一个重写规则,而不是重定向规则。它需要
[R=301,L]
在结尾处执行任何重定向。这些规则适用于您的服务器实际具有以
.html
结尾的文件,但您不希望
.html
出现在URL中。这对我很有效。已从URL中删除
.html
,但仍加载所需文件。谢谢你,帕特里克!
    RewriteCond %{THE_REQUEST} \.html [NC]
    RewriteRule ^(.*)\.html$ /$1 [R=301,L]

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

RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ $1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]