2017-09-26 109 views
0

前一段時間,我重建了CMS上的網站。正如預期的那樣,Google搜索控制檯會定期生成404個抓取錯誤的URL,我會立即使用301上的.htaccess文件將其重定向到其新的等價物。使用相同的文件夾和文件名重定向「.htaccess」

的問題是,我碰到一個老頁面的URL看起來像這樣走過來:

http://www.example.com/example 

新頁面現在稱爲http://www.example.com/example.php

有,然而,一個文件夾,名爲example過,所以如果我添加一個重定向這樣的:該文件夾也被重定向在

Redirect 301 /example http://www.example.com/example.php 

一切,所以被稱爲http://www.example.com/example/product.php URL現在會爲http://www.example.com/example.php/product.php露面。

有沒有辦法重新定向舊的URL,而不必重命名文件夾example

+0

這是什麼問題不清楚。 – anubhava

+0

我的歉意。有一箇舊鏈接指向/ example(只是一個頁面而不是文件夾),需要重定向到/example.php。還有一個名爲/ example的新文件夾,因此URL http://www.example.com/example現在會導致403 Forbidden錯誤。如何將這個只是一個頁面的URL重定向到新頁面/example.php,而不會導致新文件夾/示例的內容出現問題,而且不必重新命名所述新文件夾。 – Rolf

+1

您可以使用'RedirectMatch 301 ^/example /?$/example.php'並在清除瀏覽器緩存後對其進行測試。 – anubhava

回答

1

請清除瀏覽器緩存,然後把下面的代碼在主根.htaccess文件:

DirectorySlash Off 
RewriteEngine on 
RewriteCond %{THE_REQUEST} \s/+example [NC] 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*) /$1.php [R=302,L] 

上面的代碼將停止directoryslash並使其off所以沒有斜槓沒有文件去是目錄默認和然後檢查QUERY_STRING是否存在example,並在這一行RewriteCond %{REQUEST_FILENAME}\.php -f這裏介紹這個技巧,它會檢查是否將.php添加到這個字符串中,是否真的存在目錄中?而且我們已經在根目錄中有example.php,所以它將轉到最後一行,將通過上述規則的任何字符串重定向到itself.php以及您準確要求的內容。

上面的代碼將捕獲任何exampleroot目錄只有example,但如果想繼承其他子文件夾或應用此規則,整個網站,所以,每當有沒有擴展名字符串的優先級將是文件,把在您的主根.htaccess文件下面的代碼:

DirectorySlash Off 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*) /$1.php [R=302,L] 

測試此代碼後,如果是好的,改變302301是永久重定向

+0

謝謝穆罕默德!這工作得很好。 – Rolf

+0

很高興幫助,祝你一切順利 –