htaccess重写规则,删除问号

时间:2012-12-07 10:21:55

标签: .htaccess mod-rewrite

假设我有以下网址:

http://example.com/?param

如何从网址中删除问号,即。重写

http://example.com/param

这样的事情:

http://example.com/index.php?param

这是我的代码,不起作用:

RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]

1 个答案:

答案 0 :(得分:3)

需要完成两件完全不同的事情。首先,您需要从外部重定向浏览器,以在URL地址栏中显示不同的内容。第二,当浏览器重新发送第二个请求时,服务器在内部重新编写查询字符串。您不能随意在URL中随意添加或删除内容,因为它们是定位器。您可以创建一个新的定位器,告诉浏览器使用这个新的定位器而不是旧的定位器,然后在服务器内部将新的定位器更改回旧的定位器。

请参阅top part of this answer for an explanation

要使浏览器转到新网址:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(index\.php)?\?([^&\ ]+)
RewriteRule ^ /%1? [L,R=301]

这会请求网址:http://example.com/?something并将浏览器重定向到以下网址:http://example.com/something

然后你需要在内部重写它:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L]

当请求http://example.com/something时,服务器会将URI重写为/index.php?something。这是服务器的内部信息,因此浏览器对此一无所知,并在服务器处理URI /index.php?something时继续显示URL http://example.com/something