簡體   English   中英

Zend,將index.php重定向到index.html

[英]Zend, redirect index.php to index.html

我的SEO希望我將index.php重寫為index.html。

問題是我正在使用ZEND。 當我轉到index.php時,我會進入我的自定義異常頁面,因為Zend可能不希望了解PHP外部的某些SEO人員不希望將index.php重定向到異常頁面。

我知道Zend希望PHP擁有全部功能(並且我正在等待他們將AngularJS版本重寫為PHP for Zend3),但是...。與此同時,我暫時還停留在Zend上,我不知道該如何做。修改我的.htaccess。

目前,它看起來像這樣:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

如果我添加:

RewriteRule ^index.php$ index.html [NC,L]

這打破了Zend。

我是否必須將index.php文件重命名為zend.php,然后將最后一行修改為:

RewriteRule ^.*$ zend.php [NC,L]

還是我必須編寫一個1500行長的動作幫助程序代碼才能使其成為Zend方式?

我想我知道您想要做什么,請告訴我我是否了解您的背景知識:您有一個使用AngularJS作為前端的應用程序,並使用Zend Framework(和其他相關技術)作為后端的應用程序。

優先使用index.html而不是index.php可以使人們訪問mywebsite.com並查看AngularJS應用。 然后他們瀏覽網站,一切正常。

問題在於:他們從首頁訪問url /path/to/content.html(或在AngularJS應用中注冊的任何其他終結點),然后單擊刷新按鈕(或嘗試直接使用鏈接/ path / to訪問您的網站/content.html),他們看到的是Zend異常。 為什么?

因為/path/to/content.html作為文件不存在,並且在ZF中沒有注冊與該請求相對應的路由。 如何解決這個問題?

我可以給您我采用的解決方案,但是我警告您,我使用的是nginx而不是Apache,因此您必須翻譯那里的規則。 假設您的AngularJS應用程序的頁面使用后綴.html

// priority to the index.html, the use index.php
index index.html index.php;

// other content here

// does the url ends with .html? force the request to end to index.html
// you can use any other discriminant
location ~ .*\.(html)?$ {
    try_files $uri $uri/ /index.html;
}

使用此規則,當接收到任何以.html結尾的請求時,我將強制Web服務器使用index.html。 使用此規則,您可以直接訪問所有AngularJS端點,然后刷新頁面即可。

如果您有需要ZF應用程序的Web服務或其他終結點,它們將繼續工作。

但這還不足以在您的網站中實現SEO:即使直接鏈接現在可以使用,抓取工具也無法解釋js。 要解決此問題,您需要為搜尋器提供頁面的已解釋版本。 為了完成這項工作,您將需要一個名為prerender.io的服務(以及Web服務器配置中的其他兩個規則)。 Prerender.io內部使用PhantomJS,就像命令行瀏覽器一樣,它可以在js服務器端運行,因此您將能夠為爬蟲提供一個已經組成的網頁。

如果您想查看我的使用AngularJS的項目並進行SEO,請訪問neobazaar.com ,它遠不是一個完美的分類網站,但它具有Directlink和SEO,並使用AngularJS和ZF2(github中的源代碼)。

編輯#1此頁面可以幫助Apache模式重寫regexp 。您可以測試以下內容以查看它是否合適(我沒有測試過):

RewriteRule ^*.html$ /index.html

你不只是想要這樣嗎? (在擁有規則之前,在RewriteEngine On下方):

RewriteCond %{THE_REQUEST} \ /+index\.php
RewriteRule ^ /index.html [L,R=301]

RewriteRule ^index.html$ /index.php [L]

等待更好的解決方案,也許可以幫助您:
使用以下重定向創建index.html:

<html>
    <head>
        <meta http-equiv="refresh" content="0;URL=index.php">
    </head>
    <body>
    </body>
</html> 

Tim是正確的,這與Zend項目中的路由策略有關,而不是修改.htaccess。

僅兩行代碼(經過測試):

在您的bootstrap.php中:

protected function _initHomeRoute(){

    $router = Zend_Controller_Front::getInstance()->getRouter();
    $router->addRoute('home', new Zend_Controller_Router_Route('/index.html', array('controller' => 'index', 'action' => 'index')));
}

現在嘗試訪問yourdomain / index.html。

Tim在SEO中做到這一點也是毫無意義的。 您確實需要更好的SEO人員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM