【问题标题】:auto redirect to clean urls自动重定向到干净的网址
【发布时间】:2011-04-08 13:04:34
【问题描述】:

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

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

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

【问题讨论】:

  • 我建议您为此类链接提供错误信息,以确保规范使用。它还有助于防止黑客企图破坏您的网站!
  • 真的是你想要的吗?不是反过来吗?
  • 谢谢大家。但我想要的只是在我的网页中使用 clean url 机制(用于 SEO)www.kcdipesh.com.np 更重要的是它是一个单一的条目页面,因此没有文件夹可以将我的页面重定向到。你们能建议我什么是最好的主意吗?

标签: php clean-urls


【解决方案1】:

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

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

.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。

而且显示 404 而不是重定向也很重要,以防 url 错误。

【讨论】:

  • 正确的标题响应值得一提。
【解决方案2】:

如果您正在运行 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]

【讨论】:

  • 我认为他在寻求 php 解决方案
  • 没错,我也不会用 php 来做,但他在他的问题中提到了它。但你的解决方案很好
  • 我认为这根本不是答案。可以用这种蹩脚的方式回答任何关于 SO 的问题
  • 不可接受,不。但是我同意这并不是特别有用。
【解决方案3】:

试试

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

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

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2018-10-18
    • 2021-02-17
    • 2012-10-21
    • 1970-01-01
    • 2011-06-25
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多