.htaccess 用问号“?”重写 URL

Posted

技术标签:

【中文标题】.htaccess 用问号“?”重写 URL【英文标题】:.htaccess rewrite URL with a question mark "?" 【发布时间】:2013-09-03 18:58:17 【问题描述】:

我的目标是这个网址:

component/users/?view=registration

收件人:

registration.html

.htaccess 位于网站的 mysite 文件夹中。

我试过这个:

RewriteBase /mysite
RewriteRule ^component/users/?view=registration$ registration.html$ [R=301,L]

但我不工作......

当我尝试这个时:

RewriteRule ^component/users/_view=registration$ registration.html$ [R=301,L]

效果很好。

那么我怎样才能用问号解决这个问题。我已经读过it is not a part of the URL(附加)。我读过我必须使用类似查询字符串的东西,但我并没有真正理解语法。

也许有人可以写出这个问题的解决方案?会很棒=)

【问题讨论】:

【参考方案1】:
RewriteRule ^component/users/\?view=registration$ registration.html$ [R=301,L]

你需要一个 \ 因为 ?是正则表达式的一部分。要将其用作字符串,您需要使用 \

对其进行转义

链接提示:http://ole.michelsen.dk/tools/regex.html

【讨论】:

不起作用。它仍然将我重定向到 localhost/mysite/component/users/?view=registration :(【参考方案2】:

您需要使用%QUERY_STRING来捕获查询字符串数据:

RewriteCond %QUERY_STRING ^view=(.*)$
RewriteRule ^component/users/?$ %1.html? [R=301,L]

如果路径 component/users 匹配,上述规则/条件将获取查询字符串视图的值并使用它来形成您的重定向。

【讨论】:

感谢您的回答,但它不起作用。这就是我得到的:localhost/mysite/registration.html?view=registration 当我输入时:localhost/mysite/component/users/?view=registration 你知道如何删除这个“?view=registration”吗? @Bardock 请告诉我如何删除“?view=registration”?

以上是关于.htaccess 用问号“?”重写 URL的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter重写URL用斜杠替换问号

PHP中查询字符串的HTACCESS重写规则

.htaccess 用两个变量重写 url

PHP/Apache:用 .htaccess 重写规则

htaccess 用最终的子文件夹重写 url

用.htaccess文件实现URL重写