假设我有以下网址:
http://example.com/?param
我应该如何从 URL 中删除问号,即。改写
http://example.com/param
像这样:
http://example.com/index.php?param
这是我的代码,它不起作用:
RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]
假设我有以下网址:
http://example.com/?param
我应该如何从 URL 中删除问号,即。改写
http://example.com/param
像这样:
http://example.com/index.php?param
这是我的代码,它不起作用:
RewriteEngine On
RewriteRule ^(.*)$ /index.php?$1 [P]
需要发生两件完全不同的事情。首先,您需要从外部重定向浏览器以在 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
。