htaccess redirect vs php redirect
I have decided to change all my /dyanmic.php?UID=...
pages to /static/Name-From-DB
.
I have read that the best way to do redirection, SEO wise, is to implement a 301 .htacess redirection:
(http://www.tamingthebeast.net)- The right way - a htaccess 301 Redirect: A 301 redirect is the most efficient and spider/visitor friendly strategy around for web sites that are hosted on servers running Apache.
However, since I have thousands of pages I need to use redirection for, it seems pretty inefficient to have thousands of entries in the .htacess file:
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...
Therefore it seems like the efficient way to do it is via the PHP page, setting the header to 301 redirection according to the UID:
<?
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] );
?>
My question is if this method will effect in a negative way on my pages' rankings, considering the paragraph I quoted above that the best way to do a redirection is through the .htaccess.
Thanks!
The same headers will be sent the same whichever way you do it. Therefore, to the user (or to a search engine) it won't be any different so the PHP won't negatively effect your page rank compared to the .htaccess way.
The PHP way will be a little bit slower as every time the page is accessed a database query is fired off. If the site doesn't have too much traffic going to those pages it shouldn't be an issue though.
In your PHP page, do the database connection first because if the page doesn't exist you will want to either redirect them to another page or pass 404 error headers instead of the 301 header.
My question is if this method will effect in a negative way on my pages' rankings, considering the paragraph I quoted above that the best way to do a redirection is through the .htaccess.
No, it will not provided that you implement the redirection correctly in your PHP file! I.e., you should probably look up the Name
(by uid
) before issuing the 301
header (and only issue this when a Name
is found — otherwise it's a 404
).
Also, why don't you run a query on your database, output the redirects in .htaccess
format and write this directly to the .htaccess
file? This way you'll have to do it only once and wont have to care about non-existing uid
's.
Edit — pseudocode
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
Doing this, you'll still be able to find your redirects in a year (they're all in .htaccess) and there's no longer a need to do a look-up in the database on every "old style" request.
No. The client sees the same thing in both cases: a 301 redirect. The only difference could be delay, since the .htaccess is processed before the php file, and the sql query may add some delay, but I think the delay insignificantly small.
It won't affect your pageranking - Google appreciates when you tell them your pages has moved and that you won't maintain your site wíth duplicate content.
But as said in other answers, the header is the same wether you send it from PHP or through Apache - your focus should be how to minimize your work; both now and in the future.
By manually typing the redirect in .htaccess you actually give yourself more work then necessary when comparing to dynamically adding headers through your PHP when needed.
...the best way to do a redirection is through the .htaccess...
If you are on a shared server, that may be the case, but, in reference to a long or even a short list of files, that .htaccess file is going to be searched for with every file access within your page - Every graphic, every include file, etc.
Not only that, but, if you are a few levels deep, it checks for .htaccess files in all parent directories. So, if your file is in home/dir1/dir2/dir3, it's going to check for .htaccess files in each directory with each file access:
home/dir1/dir2/dir3/
home/dir1/dir2/
home/dir1/
home/
Best to keep it as light as possible. If you are not on a shared server, you should not use .htaccess files at all. Enter any directives into the main configuration file, under Directory, and set AllowOverride to "none".
精彩评论