Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
htaccess重定向与php重定向_Php_Seo - Fatal编程技术网

htaccess重定向与php重定向

htaccess重定向与php重定向,php,seo,Php,Seo,我已决定将所有/dyanmic.php?UID=…页面从DB更改为/static/Name。 我已经读到,做重定向的最好方法,SEO方面,是实现301.htacess重定向: (http://www.tamingthebeast.net)-正确的方法-htaccess 301 重定向:301重定向是最重要的 高效且对蜘蛛/访客友好 针对以下网站的策略: 托管在运行Apache的服务器上 但是,由于我有数千个页面需要使用重定向,因此在.htacess文件中有数千个条目似乎效率很低: redirec

我已决定将所有
/dyanmic.php?UID=…
页面从DB更改为
/static/Name。
我已经读到,做重定向的最好方法,SEO方面,是实现301.htacess重定向:

(http://www.tamingthebeast.net)-正确的方法-htaccess 301 重定向:301重定向是最重要的 高效且对蜘蛛/访客友好 针对以下网站的策略: 托管在运行Apache的服务器上

但是,由于我有数千个页面需要使用重定向,因此在.htacess文件中有数千个条目似乎效率很低:

redirect 301 /dynamid.php?UID=1 http://www.domain.com/static/Name-From-DB
redirect 301 /dynamid.php?UID=2 http://www.domain.com/static/Another-Name-From-DB
and so on...
因此,似乎最有效的方法是通过PHP页面,根据UID将标题设置为301重定向:

<?
Header( "HTTP/1.1 301 Moved Permanently" ); 
// Getting the page static name from the DB according to the UID
$result = mysql_query('SELECT Name FROM DB WHERE UID='$_GET["uid"]'');
$row=mysql_fetch_assoc($result);
// Redirect to the new page
Header( "Location: http://www.domain.com/static/" . $row[0] ); 
?> 

我的问题是,考虑到我上面引用的一段话,重定向的最佳方式是通过.htaccess,这种方法是否会对我的页面排名产生负面影响


谢谢

无论以何种方式发送,都会发送相同的头。因此,对于用户(或搜索引擎)来说,它不会有任何不同,因此与.htaccess方式相比,PHP不会对页面排名产生负面影响

PHP方式会稍微慢一点,因为每次访问页面时都会触发数据库查询。如果网站没有太多的流量进入这些页面,这应该不是一个问题


在您的PHP页面中,首先进行数据库连接,因为如果页面不存在,您将希望将它们重定向到另一个页面,或者传递404错误头而不是301头。

否。客户端在这两种情况下看到相同的情况:301重定向。唯一的区别可能是延迟,因为.htaccess是在php文件之前处理的,sql查询可能会增加一些延迟,但我认为延迟很小

我的问题是,考虑到我上面引用的一段话,重定向的最佳方式是通过.htaccess,这种方法是否会对我的页面排名产生负面影响

,如果您在PHP文件中正确实现重定向,则不会提供此选项!也就是说,您可能应该在发出
301
标题之前查找
Name
(通过
uid
)(并且仅在找到
名称时发出此标题,否则它是
404

另外,为什么不在数据库上运行查询,以
.htaccess
格式输出重定向,并将其直接写入
.htaccess
文件?这样,您只需执行一次,而不必关心不存在的
uid


编辑-伪代码

str ← ""
for each (uid, Name) in database:
    line ← concat("Redirect 301 /dynamid.php?UID=", uid, "http://www.domain.com/static/", Name, <newline>)
    append line to str
copy or write str to .htaccess
str← ""
对于数据库中的每个(uid、名称):
线← concat(“重定向301/dynamid.php?UID=,UID,”http://www.domain.com/static/“,姓名,)
将行追加到str
将str复制或写入.htaccess

这样做,你仍然可以在一年内找到你的重定向(它们都在.htaccess中),并且不再需要在数据库中查找每一个“旧样式”请求。

这不会影响你的页面排名-当你告诉他们你的页面已经移动,并且你不会使用重复内容维护你的网站时,谷歌会感激你

但正如在其他答案中所说,无论是从PHP还是通过Apache发送,标题都是相同的——您的重点应该是如何最小化您的工作;无论是现在还是将来

通过在.htaccess中手动键入重定向,与需要时通过PHP动态添加标题相比,您实际上需要做更多的工作

…执行重定向的最佳方法是通过.htaccess

如果您在共享服务器上,可能会出现这种情况,但是,对于长的甚至短的文件列表,该.htaccess文件将通过页面中的每个文件访问进行搜索—每个图形、每个包含文件,等等

不仅如此,如果您有几层深度,它还会检查所有父目录中的.htaccess文件。因此,如果您的文件位于home/dir1/dir2/dir3中,它将检查每个目录中具有每个文件访问权限的.htaccess文件:
主页/dir1/dir2/dir3/
主页/dir1/dir2/
主页/目录1/
家/


最好让它尽可能轻。如果您不在共享服务器上,则根本不应使用.htaccess文件。在目录下的主配置文件中输入任何指令,并将AllowOverride设置为“无”

您的示例php代码不安全。我包含一个sql注入错误!你必须逃出$\u获得[“uid”]!首先,谢谢你的回答。我在这种方式中看到的唯一缺点是,随着时间的推移,我相信大多数访问者最终会访问/static/page,而不是/dynamic.php。因此,我认为在.htaccess文件中列出3000多行重定向将是一项开销,因为大多数访问者将到达/static/而不是/dynamic,但仍然需要遍历.htaccess的3000多行,以查看它们是否符合任何重定向规则。也许我错了?@Joel-Yes在这种情况下,从长远来看,动态PHP解决方案可能更易于维护,资源密集度更低。只要记住正确地实现重定向。