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

时间:2014-04-30 02:18:20

标签: php apache .htaccess zend-framework

我的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方式?

4 个答案:

答案 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)

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。

蒂姆也是对的,这在SEO中毫无意义。你确实需要更好的SEO人员。