2017-06-14 100 views
0

我正在寻找包括以下重写规则,但似乎无法使其工作。我不想传入任何查询字符串,但我需要在规则中添加一个。htaccess从文件夹到查询字符串的文件夹重写规则

我希望这个网址:

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

指:

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

但保持第一URL地址栏。 我需要传入一个名为类别的变量值。

我尝试以下,但它并没有为我工作:

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] 
+0

“没有工作” - 请更具体。究竟发生了什么?您在上面发布的指令会导致500内部服务器错误 - 因为_flags_参数中存在错误的_space_。 – MrWhite

+0

我正在使用自己的服务器和网站。该页面加载但不能通过查询字符串变量。 – user3068032

+0

修改为包含以上的.htaccess文件 – user3068032

回答

0

我设法解决它。这是由于页面上的Ajax负载。

很高兴你解决你的初始查询,但是,下面在发布.htaccess文件会打破你的网站两个指令,所以推测,这些都已经被删除?

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

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

现在,它的工作原理是有可能有另一个重写规则,这是否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取代指定的查询字符串的末尾。


UPDATE:重定向HTTP到HTTPS,你需要像下面这样来代替:

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

注意前面RewriteCond指令 - 这将确保只有HTTP请求重定向,不一切(HTTP和HTTPS),所以避免了重定向循环。最终这也应该是一个301(永久)重定向,所以你应该改变RR=301,但只有当你确定它工作正常。

+0

RewriteRule ^(。*)$ https://example.co.uk/$1 [R,L]我认为这行只是重定向任何HTTP到HTTPS。我想要的只是用https替换http。 – user3068032

+0

这条线本身会重定向_everything_(包括HTTP和HTTPS),这样你就会得到一个重定向循环(因为它会继续发送重定向回自己)。您需要一个_condition_('RewriteCond'指令)来防止HTTPS请求被重定向。我已经更新了我的答案。 (如果上面没有导致重定向循环 - 因为你没有提到这个(?),那么它根本就不能被处理?) – MrWhite

相关问题