我需要将很多旧网址重定向到某些类别。
等等 - 我希望你明白这一点。 (实际上URL中没有关于内容类型的提示。)
我已经创建了一个重定向,现在我可以找到我需要的内容:
在PHP中,我现在可以查询网址,看看它是什么类型的内容:
进行重定向,获取内容。 (我知道它不安全等只是为了测试。)
我现在的主要问题是,如何在这些事件发生后屏蔽网址?
我希望在浏览器的地址栏中看到最初请求的网址(www.example.com/some-requested-content),而不是重定向到的网址。
有可能吗? 或者你能考虑另一种解决方案吗?
答案 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]