【问题标题】:Rewrite Urls with question mark and ampersand用问号和 & 符号重写 URL
【发布时间】:2013-07-26 21:05:01
【问题描述】:

在我的网站上,我有类似这样的网址的类别

www.example.com/?foowww.example.com/?bar

在这些类别中,我的文章的网址如下:

www.example.com/?foo&nr=12

以及具有如下网址的组:

www.example.com/?foo&group=somegroup

我正在尝试重写

/foo/?foo/bar?bar 等; /bar/12/?bar&nr=12 等和 /foo/somegroup/foo&group=somegroup

它应该可以使用和不使用最后的斜线。

我尝试过的(无可否认的)事情要么什么也没做,要么导致服务器错误。在某些时候,我还尝试获取&nr=xx 位或仅获取类别。其中一些是:

  • RewriteCond %{QUERY_STRING} (?:^|&)([^&]+) RewriteRule /?(.*) %1/$1 [QSA]

  • RewriteRule ^/([^/]+)/([^/]+)$ /?$1&nr=$2

  • RewriteRule ^/([^/]+) ?nr=$1 [L]

【问题讨论】:

  • 处理查询的文件的名称是什么? index.php? foobar 是“固定”词还是只是更多可能变量的示例?

标签: .htaccess variables rewrite http-status-code-301


【解决方案1】:

好的,假设处理查询的文件是 index.phpfoobar 不要更改为其他内容,您可以这样开始:

RewriteEngine On
RewriteBase /

RewriteRule ^foo$ foo/ [NC,R]
RewriteRule ^foo/$ index.php?foo [NC,L]
RewriteRule ^foo/([A-Za-z0-9_-]+)$ foo/$1/ [NC,R]
RewriteRule ^foo/([A-Za-z0-9_-]+)/$ index.php?foo&group=$1 [NC,L]

现在您应该可以自己完成bar 部分了!

顺便说一句。如果您真的希望您的查询字符串仅为?foo(没有值,例如:?foo=somevalue),您必须检查foo 的存在,而不是例如检查。 somegroup 部分。

【讨论】:

  • Kay,很抱歉没有回来 - 我没想到有人会再回答,所以我有一段时间没有回来查看。非常感谢您的意见,我正在尝试!
  • 我明白了!好吧,让我(以及其他可能遇到此线程的人)知道它是如何为您服务的!
  • 谢谢凯。首先,回答你的问题:“foo”和“bar”确实是变量,可以是任何东西。其次,我尝试了你的代码,当我输入foo/23 时它确实显示?foo&nr=23,所以我肯定在取得进展。但是,即使从之前的尝试中我有 # Don't match real existing files so CSS, scripts, images aren't rewritten RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 到位,没有任何 css 样式可以工作。
  • 也许你可以帮助我理解我想要实现的步骤:我是否需要两个规则,一个用“?”重定向所有请求和“nr=”到干净的网址,另一个在输入干净的网址时显示“脏”网址的内容?
  • 我现在可能有点慢,但我总是回来报告成功和/或失败 - 没有什么比找到一个唯一评论是“啊没关系,已修复”的问题更烦人是我自己”,不是吗?干杯!
猜你喜欢
  • 2023-03-17
  • 2013-09-03
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2021-08-12
  • 1970-01-01
  • 2012-04-23
相关资源
最近更新 更多