htaccess 重写规则,去掉问号

Kin*_*ien 1 .htaccess mod-rewrite

假设我有以下网址:

http://example.com/?param
Run Code Online (Sandbox Code Playgroud)

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

http://example.com/param
Run Code Online (Sandbox Code Playgroud)

像这样:

http://example.com/index.php?param
Run Code Online (Sandbox Code Playgroud)

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

RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]
Run Code Online (Sandbox Code Playgroud)

Jon*_*Lin 6

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

有关解释,请参阅此答案顶部

要使浏览器转到新 URL:

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

这需要对 URL 的请求:http : //example.com/?something并将浏览器重定向到 URL:http : //example.com/something

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

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

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