Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess使用querystring从文件夹到文件夹的重写规则_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Apache htaccess使用querystring从文件夹到文件夹的重写规则

Apache htaccess使用querystring从文件夹到文件夹的重写规则,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我希望包括以下内容的重写规则,但似乎无法使其正常工作。我不想传入任何查询字符串,但我需要向规则中添加一个查询字符串 我想要这个网址: https://example.co.uk/vehicles/ 指: https://example.co.uk/search-results/?category=1 但请将第一个URL保留在地址栏中。 我需要传入一个名为category的变量,该变量带有一个值 我尝试了以下方法,但对我无效: rewriterule ^vehicles/$ search-re

我希望包括以下内容的重写规则,但似乎无法使其正常工作。我不想传入任何查询字符串,但我需要向规则中添加一个查询字符串

我想要这个网址:

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

https://example.co.uk/search-results/?category=1
但请将第一个URL保留在地址栏中。 我需要传入一个名为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]

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

很高兴您解决了最初的查询,但是,您发布的
.htaccess
文件中的以下两条指令将破坏您的站点,因此,这些指令可能已经被删除了

第一条指令只是阻止所有对站点的访问,返回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
标志将请求中的查询字符串追加到
重写规则中指定的查询字符串末尾


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

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

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

“没有工作”-请更具体一些。到底发生了什么事?您在上面发布的指令将导致500内部服务器错误-因为您在flags参数中有一个错误的空格。我正在使用自己的服务器和网站。页面加载了querystring变量,但没有将其拉过。修改为包含上面的.htaccess文件。我不确定。其他人帮了我,我设法解决了。这是由于页面上加载了Ajax。重写导致Ajax页面无法加载,因为Ajax调用的url中没有完整的url。现在它可以工作了,是否可以使用另一个重写规则来执行此操作并重写到但仅显示重写规则^(.*)$[R,L]我认为这行代码只是将任何http重定向到https。我所要做的就是用https替换http。这一行本身将重定向所有内容(http和https),因此您将得到一个重定向循环(因为它将继续向自身发出重定向)。您需要一个条件(
RewriteCond
指令)来防止HTTPS请求被重定向。我已经更新了我的答案。(如果上面没有导致重定向循环-因为您没有提到这一点(?)那么它根本无法得到处理?!)
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.co.uk/$1 [R,L]