2012-04-20 60 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。

相關問題