无法使用.htaccess从URL中删除查询字符串

时间:2016-06-23 03:44:08

标签: php .htaccess mod-rewrite

我的网址看起来像http://example.com/?n=x。我希望网址显示为http://example.com/。到目前为止,我已经习惯了,但没有一种方法有效。

  1. 第一个基于this question

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

  2. 在下面的答案之后,我修改了.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]

    2. 它们似乎都不起作用。

      我还有一些问题:

      1. 如果未手动输入网址,重写是否有效?
      2. 我还可以在PHP中访问查询字符串的值吗?
      3. 当用户复制重写的URL时会发生什么?

1 个答案:

答案 0 :(得分:0)

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

其他问题:

  1. 适用于所有类型。无论是机器人还是人类编写它都无关紧要,当您访问页面时,将会读取.htaccess
  2. 是的,你可以。使用$_SERVER["QUERY_STRING"]。如果在解释之前使用htaccess重定向,则会因为重定向而丢失它们。
  3. 你是什么意思?