htaccess使用查询字符串

时间:2017-06-14 11:46:02

标签: apache .htaccess mod-rewrite url-rewriting

我希望为以下内容添加重写规则,但似乎无法使其发挥作用。我不想传递任何查询字符串,但我需要在规则中添加一个。

我想要这个网址:

https://example.co.uk/vehicles/

指向:

https://example.co.uk/search-results/?category=1

但请保留地址栏中的第一个网址。 我需要传入一个名为category的变量值。

我尝试了以下但是它对我不起作用:

rewriterule ^vehicles/$ search-results/?category=1 [NC, L]

任何帮助都将不胜感激。

RewriteEngine On
RewriteRule .* ? [F,L]
RewriteRule ^(.*)$ https://example.co.uk/$1 [R,L]
RewriteRule ^ad/(.*/)?([0-9]+)$ view-ad/?ad=$2 [NC,L]
RewriteRule ^vehicles/$ search-results/?category=1 [NC,L]

1 个答案:

答案 0 :(得分:0)

  

我设法解决了这个问题。这是由于页面上的Ajax负载。

很高兴您解决了初始查询,但是,您发布的.htaccess文件中的以下两个指令会破坏您的网站,因此可能已经删除了这些指令?

RewriteRule .* ? [F,L]
RewriteRule ^(.*)$ https://example.co.uk/$1 [R,L]

第一个指令只是阻止对您网站的所有访问,返回403 Forbidden响应。第二个指令将导致重定向循环。

  

既然它有效又可以有另一个重写规则执行此操作https://example.co.uk/vehicles/?something=1并重写为https://example.co.uk/vehicles/?category=1&appendsomething=1但只显示https://example.co.uk/vehicles/

我认为你的意思是https://example.co.uk/search-results/?category=1&something=1(而不是/vehicles/) - 其中something=1 > 在查询字符串的末尾?

您无法将此“显示为https://example.co.uk/vehicles/” - 因为这会与现有(工作)指令冲突

但是,您可以修改现有指令以处理/?something=1的请求,并将其传递给替换。这只需要添加QSA标志(查询字符串追加)。例如:

RewriteRule ^vehicles/$ search-results/?category=1 [QSA,NC,L]

QSA标志会将请求中的查询字符串附加到RewriteRule 替换中指定的查询字符串的末尾。

更新:要将HTTP重定向到HTTPS,您需要以下内容:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.co.uk/$1 [R,L]

请注意前面的RewriteCond指令 - 这可确保仅重定向HTTP请求,而不是所有(HTTP和HTTPS),因此避免重定向循环。最终,这也应该是301(永久)重定向,因此您应该将R更改为R=301,但只有当您确定它正常工作时才会这样。