htaccess删除get变量以制作更好的url

时间:2018-04-14 12:00:21

标签: php .htaccess mod-rewrite

我想要一个漂亮的网址,可以将https://www.url.com/profile.php/?lang=en&user=1#userinfo更改为https://url.com/profile/en/1#userinfo。 lang变量在每一页上都有。

我试图将我的扩展程序取消并且可以正常工作

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

但现在我需要获取变量,我已经环顾四周但没有任何效果。

1 个答案:

答案 0 :(得分:1)

这些规则检查请求行(e.g., "GET /index.html HTTP/1.1"),请求路径为/profile.php,如果包含查询字符串lang=&user=,请将请求uri从/profile.php重定向到{{ 1}},/profile/%1/%2%1是匹配分组部分的后引用%2

([^&]+)

此规则内部会重写从RewriteCond %{THE_REQUEST} ^[A-Z]+\ /profile\.php RewriteCond %{QUERY_STRING} lang=([^&]+)&user=([^&]+) RewriteRule ^/?profile.php$ /profile/%1/%2 [NE,R,L,QSA] /profile/{lang}/{user_id}的网址。因此,当请求uri /profile.php?lang={lang}&user_id={user_id}时,服务器知道重写的uri是/profile/en/1

/profile.php?lang=en&user_id=1