删除网址中包含参数的部分

时间:2018-08-30 21:18:40

标签: apache .htaccess url mod-rewrite

我有这个网址:

https://www.example.it/page.php?user=Pippo

我应该得到的结果是:

https://www.example.it/Pippo

我尝试使用以下代码:

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

但是URL的一部分仍然保留,如果我返回到另一页,只要服务器崩溃,我就会一直被重定向到同一页。

1 个答案:

答案 0 :(得分:1)

如果您想将/page.php?user=<username>重定向到/<username>,其中<username>是一系列的AZ或AZ字符,请尝试以下类似的操作.htaccess文件中的内容:

Options -MultiViews

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$    
RewriteCond %{QUERY_STRING} ^user=([a-zA-Z]+)
RewriteRule ^page\.php$ /%1? [R=302,L]

请澄清一下,这只是为了满足可能已经为旧网址建立索引或外部网站已链接到旧网址的搜索引擎。您的应用程序中的URL已直接链接到/<username>

%1是对最后匹配的 CondPattern 中捕获的组的反向引用。对REDIRECT_STATUS 环境变量进行检查是为了确保我们仅检查初始请求,而不是重写的请求。

只有在测试可以正常运行后,才能更改为301。

然后,您可以遵循现有规则,该规则在内部将请求重新写回到/page.php?user=<username>。尽管指令上的NC标志是不必要的。就像检查现有文件(可能是目录?)一样,除非您有不带扩展名的文件?而且您无需在字符类中转义点。因此,可以简化为:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ /page.php?user=$1  [L]