【问题标题】:RewriteRule is working opposite or not working?RewriteRule 工作相反还是不工作?
【发布时间】:2017-06-20 08:31:59
【问题描述】:

我的默认网址是http://www.example.com/?page=20&id=2,我想用.htaccess 将其显示为http://www.example.com/page/20/id/2/

我使用以下代码;

<IfModule mod_rewrite.c>
Options +FollowSymLinks +Indexes -MultiViews
RewriteEngine on
RewriteBase /
DirectoryIndex index.php

RewriteRule page/(.*)/id/(.*)/?$ ?page=$1&id=$2 [R=301,NE,NC,L]
RewriteRule page/(.*)/?$ ?page=$1 [R=301,NE,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /

</IfModule>

如果我在代码末尾删除 [R=301,NE,NC,L],则 /page/20/id/2/ 如果我直接去但当我写为 ?page=20&id=2 时工作, url 在浏览器上没有改变。

如果我像上面那样使用它,它会从 /page/20/id/2/ 重定向到 ?page=20&id=2 ,这与我尝试做的相反。

如果有人可以帮助我,我将不胜感激。

谢谢。

【问题讨论】:

  • 请注意,这通常不是人们创建“漂亮 URL”的方式。您仍在引用变量名称,这很好,但并不是真正需要,因此您可以将您的 URL 设置为 .com/20/2,但当然这都是美观的,所以这取决于您。
  • 尝试将 RewriteRule page/(.*)/id/(.*)/?$ 更改为 RewriteRule ^page/(.*)/id/(.*)/?$ 看看是否有帮助
  • /pages 或 /id 可以更改,主要问题是我无法重定向 url。无论如何感谢您的建议。
  • “但是当我写成 ?page=20&id=2 时,浏览器上的 url 没有改变” - 这主要是因为你没有做任何事情 到目前为止,这将实现这一目标... // 只有在存在无法更改的外部链接时,您才需要这样做。您将系统本身输出的所有链接更改为您想要的 HTML 输出中的“漂亮”表单,这一点很清楚,对吧?
  • @GiovanniLeGrand 它没有帮助,因为 RewriteRule 只检查 URL 的 path 组件。如果你想根据查询字符串的内容做任何事情,你需要一个使用相应变量的 RewriteCond 来做到这一点。

标签: php apache .htaccess redirect mod-rewrite


【解决方案1】:

这应该可以工作

RewriteEngine On
RewriteCond %{HTTP_HOST} example.com$ [NC]
RewriteCond %{QUERY_STRING} page=(.*)&id=(.*)
RewriteRule ^$ /page/%1/id/%2? [L,R=301]

htaccess 小提琴http://htaccess.mwl.be?share=afb950c7-106e-5b9c-a7ed-358aed027bc0

【讨论】:

  • 返回“页面未找到”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2023-03-07
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2014-09-02
相关资源
最近更新 更多