关于将mod_rewrite用于干净URL的问题

时间:2013-04-12 17:55:34

标签: database .htaccess url

我想在.htaccess中使用mod_rewrite将http://www.companysite.com/gallery.php?galid=1&desc=blah%20blah%20blah等网址重写为http://www.companysite.com/gallery/1/blah-blah-blah

使用粗略代码 Loren 给了我:

#Perform a 301 redirect from the old URL to the new URL  
RewriteRule ^gallery.php?galid=([0-9]+)&desc=(.*) http://www.companysite.com/gallery/$1/$ [R=301,L]  

#Rewrite new URL to the proper internal URL
RewriteRule ^gallery/([0-9]+)/(.*)$ ^gallery.php?galid=$1&desc=$2  [L]

如果desc的查询字符串是blah%20blah%20blah,那将如何重写?理想情况下,我希望desc被重写为blah-blah-blah。我该怎么做?

1 个答案:

答案 0 :(得分:2)

您只能使用htaccess文件执行此操作。

您应该更改网站中的链接以反映新重写的网址,并为指向新网址的旧网址添加301重定向

对于已经使用Google编入索引的网页,您可以执行从旧网址到新网址的301重定向 - 这将告诉谷歌旧网址已更新为新重写的网址,这可以防止您丢失排名/索引该页面

如果有人点击了旧网址的链接,则不会自动重写,除非您有301重定向,然后会自动将用户重定向到正确重写的网址

如果我对上述领域有所了解,请告诉我。

创建新网址结构并设置301以将旧网址指向新网址时,我建议您向谷歌提交旧网站地图,他们会抓取旧网址,检测301并使用您的更新索引新重写的URL - 我过去已经完成了这一百万次,并且它的工作完美无缺

301旧网址到新网址

这是通过htaccess文件

进行非常简单的301重定向的示例
RewriteRule ^contact_us\.php$ http://www.mydomain.com/contact_us.html [R=301]

使用上面的链接重写的示例

这是一个快速而肮脏的例子,首先在旧网址上执行301,然后将新网址重写为内部网址结构 - 快速启动 - 如果有任何错误,请道歉

#Perform a 301 redirect from the old URL to the new URL
RewriteRule ^gallery.php?galid=([0-9]+)&desc=(.*) http://www.mydomain.com/gallery/$1/$2 [R=301,L]

#Rewrite new URL to the proper internal URL
RewriteRule ^gallery/([0-9]+)/(.*)$ ^gallery.php?galid=$1&desc=$2  [L]

请记住

/gallery.php?galid=1&desc=blah%20blah%20blah重写为/gallery/1/blah-blah-blah会要求您考虑blah blah blah中的空格 - 如果您重写为blah-blah-blah,那么当您收到查询字符串desc时它将收到与blah-blah-blah

不同的blah blah blah 知道我的意思吗?

<强>资源

<强> This is a good article on URL rewrites and redirects