PHP重定向后如何实现mod_rewrite?

时间:2017-03-28 22:33:49

标签: php mod-rewrite url-redirection

我需要将很多旧网址重定向到某些类别。

  • www.example.com/some-requested-product - >的 www.example.com/index.php?categories=some-requested-product
  • www.example.com/some-requested-article - >的 www.example.com/index.php?articles=some-requested-article
  • www.example.com/some-requested-user - >的 www.example.com/index.php?users=some-requested-user

等等 - 我希望你明白这一点。 (实际上URL中没有关于内容类型的提示。)

我已经创建了一个重定向,现在我可以找到我需要的内容:

  • RewriteRule ^([a-zA-Z0-9 - ] +)$ /index.php%{REQUEST_URI}

在PHP中,我现在可以查询网址,看看它是什么类型的内容:

  • if($ _SERVER ['REQUEST_URI'] ==“/ some-requested-content”){Redirect($ BaseURL。“/ index.php?category_type = some-requested-content”,false); }

进行重定向,获取内容。 (我知道它不安全等只是为了测试。)

我现在的主要问题是,如何在这些事件发生后屏蔽网址?

我希望在浏览器的地址栏中看到最初请求的网址(www.example.com/some-requested-content),而不是重定向到的网址。

有可能吗? 或者你能考虑另一种解决方案吗?

1 个答案:

答案 0 :(得分:0)

您正在寻找查询字符串追加(QSA

RewriteCond %{REQUEST_URI} ^/some-requested-article$
RewriteRule ^(.*)$ index.php?articles=$1 [L,QSA]

RewriteCond %{REQUEST_URI} ^/some-requested-product
RewriteRule ^(.*)$ index.php?categories=$1 [L,QSA]

等等,您可以使正则表达式覆盖查询字符串的每种情况,例如类别,文章,用户等。

L意味着最后在重写规则中处理,这非常重要。

这会保留可见的URI,但在内部传递处理请求所需查询字符串数据的页面。

所以你并没有真正地掩盖' url,url基本上只是填写所需的查询字符串数据,然后将其发送到处理请求的文件。这是一种常见的方法,例如,许多博客和cms平台如何处理搜索引擎友好的网址。

但请注意,由于您未在每种情况下提供更准确的实际网址示例,因此我发布的解决方案需要处理变量值的正则表达式。如果类型之间没有实际的模式差异,那么您无法使用此方法,您必须在每个查询字符串类型的精确值/网址列表中下载并使用RewriteCond测试中的[OR]选项。只要不涉及太多页面,这就有效。

像这样:

RewriteCond %{REQUEST_URI} ^/beans-are-fun$ [OR]
RewriteCond %{REQUEST_URI} ^/rice-is-fun$ [OR]
RewriteCond %{REQUEST_URI} ^/fun-with-rice-and-beans$
RewriteRule ^(.*)$ index.php?articles=$1 [L,QSA]