.htaccess rewriterule和301重定向

时间:2014-03-19 13:35:47

标签: php apache .htaccess mod-rewrite redirect

美好的一天。目前我正在忙着改造网站。无法解决几个问题。

1.我需要更改网址结构 - 例如链接到«somepage»,如:

site.com/index.php?page=somepage

现在看起来像:

site.com/someCategory/somepage

据我所知,为了不丢失«somepage»的页面排名,我需要进行301重定向。据我所知,它看起来像这样:

Redirect 301 site.com/index.php?page=somepage site.com/someCategory/somepage

如果有多个页面(大约400页),那么它将如下所示:

Redirect 301 site.com/index.php?page=somepage site.com/someCategory/somepage
Redirect 301 site.com/index.php?page=somepage1 site.com/someCategory/somepage1
Redirect 301 site.com/index.php?page=somepage2 site.com/someCategory/somepage2

Redirect 301 site.com/index.php?page=somepageN site.com/someCategory/somepageN

2.我需要从www重定向到非www。它看起来像这样:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

3.此外,目前我的.htaccess文件还有创建漂亮网址的规则:

DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/(.+)/?$ index.php?category=$1&page=$2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/?$ index.php?category=$1

问题是:

  • 如何将它们全部组合起来?我应该以什么顺序安排这一切?
  • 重定向是否在大约400个301redirects的存在下正常工作?
  • 也许你可以指出我的错误?

1 个答案:

答案 0 :(得分:1)

RewriteEngine On

# www to non-www
RewriteCond %{HTTP_HOST}  ^www\. [NC]
RewriteRule ^(.*)$  http://domain.com/$1  [R=301,L]

# SEO format to dynamic format (200, not 301)
RewriteRule  ^someCategory/([^/]+)/?$  /index.php?page=$1 [QSA]
# 'someCategory' is fixed text

someCategory 会有所不同吗?将它作为另一个Query String变量是否有用?

#3与#1的区别如何?您没有执行301映射SEO格式到内部动态格式。 #3更具SEO动态吗?你怎么分辨#1和#3?