【问题标题】:Unable to remove query strings from URL using .htaccess无法使用 .htaccess 从 URL 中删除查询字符串
【发布时间】:2016-10-25 05:12:58
【问题描述】:

我的网址看起来像http://example.com/?n=x。我希望 URL 显示为 http://example.com/。到目前为止我已经习惯了这些方法,但它们都不起作用。

  1. 第一个基于this question:

    RewriteEngine On RewriteCond %{QUERY_STRING} ^n=1$ RewriteRule (.*) $1? [R=permanent]

在下面回答后我修改了.htaccess文件:

 ```RewriteEngine On
 RewriteCond %{QUERY_STRING} ^n=(.*)$
 RewriteRule (.*) $1? [R=permanent]```

但它仍然没有工作。这是调试信息:

RewriteCond %{QUERY_STRING} ^n=(.*)$   
This condition was met.


RewriteRule (.*) $1? [R=permanent]   
The new url is http://example.com/blog/cat/??
Test are stopped, a redirect will be made with status code permanent
  1. 第二种方法是:

    RewriteEngine On RewriteCond %{QUERY_STRING} !^$ RewriteRule ^(.*)$ $1 [QSD]

它们似乎都不起作用。

我还有几个问题:

  1. 只有在不手动输入 URL 的情况下,重写才有效吗?
  2. 我还能在 PHP 中访问查询字符串的值吗?
  3. 当用户复制重写后的 URL 时会发生什么?

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    如果您转到http://example.com/?n=1,第一种方法是正确的,如果我是正确的,您应该将^n=1$更改为^n=(.*)$

    还有其他问题:

    1. 它适用于所有类型。不管是机器人还是人写的,当你访问一个页面时,.htaccess 都会被读取。
    2. 是的,你可以。使用$_SERVER["QUERY_STRING"]。如果你使用前面解释过的 htaccess 重定向,你会因为你在重定向而丢失它们。
    3. 什么意思?

    【讨论】:

    • 感谢@P0IT10n 的回答 URL 仍然没有重写。
    • 尝试在RewriteEngine OnRewriteCond %{QUERY_STRING} ^n=(.*)$之间添加,RewriteBase /
    • 如果还是不行,试试看你的.htaccess是否被读取。使用this尝试HTACCESS规则
    • 我已更新问题以添加额外的调试信息。 :)
    • 你用过http://example.com/blog/cat/?? 那一个的正确输出应该是什么?
    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多