假设我有以下网址:
http://example.com/?param
如何从网址中删除问号,即。重写
http://example.com/param
这样的事情:
http://example.com/index.php?param
这是我的代码,不起作用:
RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]
答案 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。