[英]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.