自动重定向到清理网址

时间:2011-04-08 13:04:35

标签: php clean-urls

我怎样才能自动将网站从脏网址重定向到PHP中的清理网址,如

http://www.mysite.com?page=page1&action=action1

http://www.mysite.com/page1/action1

3 个答案:

答案 0 :(得分:5)

你必须检查它是否是干净的请求。 否则你将陷入无限循环

以下是我的一个项目的示例

的.htaccess

RewriteEngine On
RewriteRule ^game/([0-9]+)/ /game.php?newid=$1

game.php

if (isset($_GET['id'])) {
  $row = dbgetrow("SELECT * FROM games WHERE id = %s",$_GET['id']);
  if ($row) {
    Header( "HTTP/1.1 301 Moved Permanently" ); 
    Header( "Location: /game/".$row['id']."/".seo_title($row['name'])); 
  } else {
    Header( "HTTP/1.1 404 Not found" ); 
  }
  exit;
}

if (isset($_GET['newid'])) $_GET['id'] = $_GET['newid'];

所以,你必须验证,如果它是直接的“脏”电话或重写的话 然后只有前一个重定向。
你需要一些代码来构建干净的URL。

如果url错误,显示404而不是重定向也非常重要。

答案 1 :(得分:3)

如果您正在运行Apache,则可以使用mod_rewrite模块并在httpdocs文件夹或Web根目录中的.htaccess文件中设置规则。当较低级别的组件能够更好地完成工作时,我认为没有任何理由调用PHP进程来进行重定向。

An example from Simon Carletti

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/page\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ http://mydomain.site/page/%1.pdf [R=302,L]

答案 2 :(得分:2)

header("Location: http://www.mysite.com/".$_GET['page']."/".$_GET['action']);

您应该在尝试重定向之前检查值是否已设置