1

假设我有以下网址:

http://example.com/?param

我应该如何从 URL 中删除问号,即。改写

http://example.com/param

像这样:

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

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

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

1 回答 1

6

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

请参阅此答案的顶部以获取解释

要使浏览器转到新 URL:

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

这需要 URL 的请求:http ://example.com/?something并将浏览器重定向到 URL: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 时继续显示 URL http://example.com/something/index.php?something

于 2012-12-07T10:36:52.200 回答