我的SEO要我将index.php重写为index.html。
问题在于我使用的是ZEND。当我去index.php时,我登陆了我的自定义异常页面,因为Zend可能不想理解一些PHP外部的SEO人员不希望将index.php重定向到异常页面。
我理解Zend想要PHP的所有内容(而我正在等待他们将Zeular3的AngularJS版本重写为PHP)但是......同时,我现在仍然被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方式?
答案 0 :(得分:2)
我想我知道你要做什么,告诉我,如果我理解你的背景: 你有一个应用程序,它使用AngularJS作为后端的Zeon Framework和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结尾的任何请求时,我强制网络服务器使用index.html。 使用此规则,您可以直接访问所有AngularJS端点,刷新页面将起作用。
如果您有需要ZF应用程序的Web服务或其他端点,他们将继续工作。
但这还不足以在您的网站中实施SEO:即使直接链接现在正在运行,爬虫也不会解释js。 要解决此问题,您需要使用已解释的页面版本为抓取工具提供服务。要使这项工作,您将需要一个名为prerender.io的服务(以及Web服务器配置中的其他几个规则)。 Prerender.io在内部使用PhantomJS,就像命令行浏览器一样,可以运行js服务器端,因此您可以将已经组合的网页提供给爬虫。
如果你想看到我的项目使用AngularJS并拥有搜索引擎优化请访问neobazaar.com,它远不是一个完美的分类广告网站,但它有直接链接和搜索引擎优化,并使用AngularJS和ZF2(源代码在github上)。
编辑#1 这个页面可以帮助Apache mode rewrite regexp。您可以测试以下内容以确定它是否适合(我没有测试它):
RewriteRule ^*.html$ /index.html
答案 1 :(得分:1)
难道你不想要这样的东西吗? (在规则之前,在RewriteEngine On
下方):
RewriteCond %{THE_REQUEST} \ /+index\.php
RewriteRule ^ /index.html [L,R=301]
RewriteRule ^index.html$ /index.php [L]
答案 2 :(得分:1)
等待更好的解决方案,也许这可以帮到你:
使用如下所示的重定向创建index.html:
<html>
<head>
<meta http-equiv="refresh" content="0;URL=index.php">
</head>
<body>
</body>
</html>
答案 3 :(得分:1)
只有两行代码(已测试):
在你的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。
蒂姆也是对的,这在SEO中毫无意义。你确实需要更好的SEO人员。