2012-04-20 61 views
7

我们有一个网站,不幸的是所有的网址都有.html后缀,它是一个Magento安装,Magento允许你在CMS上改变它,但不幸的是,所有这些网址后缀为.html在Google中排名很好。我们需要重定向到非.html从重定向的URL中删除.html

因此,请考虑以下情况,我们从头开始重建此网站,因此我们在新网站上使用相同的网址,但没有.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] 

和:

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

,但它似乎没有工作...任何想法?

回答

8

好了,所以,经过一番研究,并没有一个重写规则来实现这一点,下面的代码行的工作:

redirectMatch 301 ^(.*)\.html $1 

这是非常有用的,以消除任何URL扩展,避免损坏的链接,希望帮助未来的人...

干杯!

+0

你好,只是为了澄清我的疑问,这条规则在做什么?它不是说第一个参数是你从请求中接收到的表达式,第二个参数是你将发送给apache的那个表达式?他们应该被切换 - > ^(。*)$ 1.html – alexserver 2013-09-26 05:07:35

+0

该规则是删除'.html'。第一部分是它匹配的内容:任何具有'.html'的url。 '$ 1'是匹配的括号中的内容:除'.html'之外的所有内容。 – 2016-08-18 09:34:55

+0

我会添加'$'来确保'.html'出现在URL的末尾:'redirectMatch 301 ^(。*)\。html $ $ 1' – 2016-08-18 09:49:29

1

这应该做的伎俩:

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

谢谢,但似乎没有改变,我知道我可以删除magento CMS上的前缀,但再见谷歌排名...什么是“w +”?我应该使用[R = 301,NC]还是SOMETHING? – 2012-04-20 11:30:35

+0

那么这样做是以任何以.html结尾的请求(\ w +匹配任何非空字符串的字母数字字符),并将其重定向到相同的地址,但没有.html。我假设你想要别的东西,而Vikas解决方案似乎是一个整洁的解决方案 – 2012-04-20 11:48:40

+0

感谢队友,我认为你的方式是正确的,Vikas解决方案很好,但正如我上面所解释的,只有在URL存在的情况下,在这种情况下这个URL(.html)将被删除,并且我希望每个人都被重定向到没有.html的新网址。我编辑主要的.htaccess并添加了你在正确的地方建议的行,但没有重定向正在完成,也许我做错了在整个magento安装的主要.htacess文件中添加此行,我试图使一个单独的.htacess为这家商店(我有一个多主题安装)谢谢! – 2012-04-23 09:10:52

1

按照steps,你就可以从网址,而无需修改.htaccess文件删除的.html。

+0

谢谢你,这真实的作品,只有你的网页之前有.html后缀,但在这种情况下,这个页面.html不存在。它确实存在于旧网站上,但不存在于新网站中,所以每当有人前往旧版ulr(www.mysite.de/thing.html)时,将其重定向到www.mysite.de/thing,而不是404 Not找到。我认为这可以通过htaccess来实现,对吧? – 2012-04-23 09:00:18

+0

链接唯一答案不是高质量。链接的内容可能会更改或不可用。使用户点击答案也不方便用户使用。至少总结这里的步骤会更好。 – 2016-08-18 09:36:52

0

尝试使用此方法把你的.htaccess文件 重定向永久www.mysite.de/cool-shoes.html www.mysite.de/cool-shoes 这可能对你有帮助

8

这将重写URL像这样http://example.com/page.html - >http://example.com/page

# Remove .html from url 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
+0

此代码似乎添加了一个'.html'不能删除它。它也似乎是重写规则,而不是重定向规则。最后需要'[R = 301,L]'做任何重定向。 – 2016-08-18 09:38:57

2

尝试添加以下到.htaccess文件在你的网站的根目录的URL重定向以.html扩展名并删除它。

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] 
1

这是为我工作的解决方案。

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] 
+0

这些规则看起来适用于你的服务器实际上具有以'.html'结尾的文件,但不希望'.html'出现在URL中的情况。 – 2016-08-18 09:44:11

0

这是为以.html /product/raspberrypi.html ---> /产品/树莓派/(/product/raspberrypi/index.php)结束的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。

相关问题