重定向规则以从 URL 中删除查询字符串
Redirect rule to remove query string from URL
一直在尝试使用查询字符串编写重定向规则但没有成功。
我有 URL example.com/blog/?page=1
或 example.com/blog/?hello
,所以查询字符串中的内容并不重要。如何编写重定向规则,以便它剪切查询字符串并重定向到查询字符串之前的 URL 。例如,这两个 URL 都必须重定向到 example.com/blog/
,以便 URL 不包含任何查询字符串。
我在努力
RewriteRule ^blog/?$ blog/ [R=301,L,NE]
但被重定向到 404 页面。
也试过了
RewriteRule ^blog/?$ /blog/ [R=301,L,NE]
并收到页面无法正常工作的消息,'URL' 重定向您的次数过多。
顺便说一句,我使用的技术是带有 htaccess 插件的 Gatsby。
要删除查询字符串,您首先需要检查是否有要删除的查询字符串,否则,它什么都不做。
例如,要从 /blog/?<query-string>
中删除查询字符串,您可以这样做:
RewriteCond %{QUERY_STRING} .
RewriteRule ^(blog)/?$ // [QSD,R=302,L]
这匹配 URL-path blog/
(尾部斜杠可选)并重定向到 /blog/
(尾部斜杠)。您的示例 URL 包含尾部斜线,但您的正则表达式似乎表明尾部斜线是可选的?
前面的条件(RewriteCond
指令)检查QUERY_STRING
服务器变量以确保这是non-empty(即它匹配单个字符,用点表示)。
substitution 字符串中的 </code> 反向引用包含前面 <code>RewriteRule
pattern[=76 中捕获组的值=]. IE。本例中的“博客”。这简单地节省了重复。你可以很容易地写 RewriteRule ^blog/?$ /blog/ [QSD,R,L]
来代替。
QSD
(查询字符串丢弃)标志从重定向的响应中删除原始查询字符串,否则,这将默认通过(这将创建一个 redirect-loop)。
如果请求不包含查询字符串,则此规则不执行任何操作(因为 条件 将失败)。
如果这是永久性的,则将 302(临时)重定向更改为 301(永久性),但前提是您确认这按预期工作。 301 由浏览器持久缓存,因此会使测试出现问题。
查看您现有的规则:
was trying RewriteRule ^blog/?$ blog/ [R=301,L,NE]
but got redirected to 404 page.
默认情况下,相对 替换 字符串(即 blog/
)被视为相对于包含 .htaccess
文件和此“ directory-prefix" 然后作为前缀回到相对 URL,因此这将(默认情况下)导致格式错误的重定向 https://example.com/path/to/public_html/blog/
.
Also tried RewriteRule ^blog/?$ /blog/ [R=301,L,NE]
and got message that page is not working, 'url' redirected you too many times.
这不是在检查(或删除)查询字符串,因此这基本上只是重定向到自身 - 无休止的 redirect-loop。
从 any 中删除 any 查询字符串 URL
What rule do i write, to remove query string from any URL.
修改 RewriteRule
模式 以匹配任何 URL 并重定向到相同的。例如:
RewriteCond %{QUERY_STRING} .
RewriteRule (.*) / [QSD,R=302,L]
这需要在任何现有重写之前位于 root .htaccess
文件的顶部。
如果 .htaccess
文件在子目录(不是根目录)中,那么您将需要执行类似以下的操作,因为 </code> 反向引用(如上所用)不会包含完整的 root-relative URL-path.</p>
<pre><code>RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [QSD,R=302,L]
一直在尝试使用查询字符串编写重定向规则但没有成功。
我有 URL example.com/blog/?page=1
或 example.com/blog/?hello
,所以查询字符串中的内容并不重要。如何编写重定向规则,以便它剪切查询字符串并重定向到查询字符串之前的 URL 。例如,这两个 URL 都必须重定向到 example.com/blog/
,以便 URL 不包含任何查询字符串。
我在努力
RewriteRule ^blog/?$ blog/ [R=301,L,NE]
但被重定向到 404 页面。
也试过了
RewriteRule ^blog/?$ /blog/ [R=301,L,NE]
并收到页面无法正常工作的消息,'URL' 重定向您的次数过多。
顺便说一句,我使用的技术是带有 htaccess 插件的 Gatsby。
要删除查询字符串,您首先需要检查是否有要删除的查询字符串,否则,它什么都不做。
例如,要从 /blog/?<query-string>
中删除查询字符串,您可以这样做:
RewriteCond %{QUERY_STRING} .
RewriteRule ^(blog)/?$ // [QSD,R=302,L]
这匹配 URL-path blog/
(尾部斜杠可选)并重定向到 /blog/
(尾部斜杠)。您的示例 URL 包含尾部斜线,但您的正则表达式似乎表明尾部斜线是可选的?
前面的条件(RewriteCond
指令)检查QUERY_STRING
服务器变量以确保这是non-empty(即它匹配单个字符,用点表示)。
substitution 字符串中的 </code> 反向引用包含前面 <code>RewriteRule
pattern[=76 中捕获组的值=]. IE。本例中的“博客”。这简单地节省了重复。你可以很容易地写 RewriteRule ^blog/?$ /blog/ [QSD,R,L]
来代替。
QSD
(查询字符串丢弃)标志从重定向的响应中删除原始查询字符串,否则,这将默认通过(这将创建一个 redirect-loop)。
如果请求不包含查询字符串,则此规则不执行任何操作(因为 条件 将失败)。
如果这是永久性的,则将 302(临时)重定向更改为 301(永久性),但前提是您确认这按预期工作。 301 由浏览器持久缓存,因此会使测试出现问题。
查看您现有的规则:
was trying
RewriteRule ^blog/?$ blog/ [R=301,L,NE]
but got redirected to 404 page.
默认情况下,相对 替换 字符串(即 blog/
)被视为相对于包含 .htaccess
文件和此“ directory-prefix" 然后作为前缀回到相对 URL,因此这将(默认情况下)导致格式错误的重定向 https://example.com/path/to/public_html/blog/
.
Also tried
RewriteRule ^blog/?$ /blog/ [R=301,L,NE]
and got message that page is not working, 'url' redirected you too many times.
这不是在检查(或删除)查询字符串,因此这基本上只是重定向到自身 - 无休止的 redirect-loop。
从 any 中删除 any 查询字符串 URL
What rule do i write, to remove query string from any URL.
修改 RewriteRule
模式 以匹配任何 URL 并重定向到相同的。例如:
RewriteCond %{QUERY_STRING} .
RewriteRule (.*) / [QSD,R=302,L]
这需要在任何现有重写之前位于 root .htaccess
文件的顶部。
如果 .htaccess
文件在子目录(不是根目录)中,那么您将需要执行类似以下的操作,因为 </code> 反向引用(如上所用)不会包含完整的 root-relative URL-path.</p>
<pre><code>RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [QSD,R=302,L]