2

我如何自动将站点从脏 url 重定向到 php 中的干净 url,例如

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

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

3 回答 3

5

您必须检查它是否是干净的请求。否则会陷入死循环

这是我的一个项目中的一个示例

.htaccess

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

游戏.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 而不是重定向也很重要。

于 2011-04-08T13:12:45.427 回答
3

如果您正在运行 Apache,您可以使用 mod_rewrite 模块并在 httpdocs 文件夹或 Web 根目录中的 .htaccess 文件中设置规则。当较低级别的组件做得更好时,我看不出有任何理由调用 PHP 进程进行重定向。

西蒙·卡莱蒂的一个例子

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

尝试

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

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

于 2011-04-08T13:07:15.130 回答