我有一个PHP页面,比方说/users/profile.php
,我需要使网址更优雅,例如/users/123
而不是/users/profile.php?id=123
。
我定义了所需的规则,在/users/123
上使用以下内容执行/users/profile.php?id=123
:
RewriteRule ^users/([0-9]+)$ /users/profile.php?id=$1 [L]
一切都很完美,但搜索引擎已经熟悉了/users/profile.php?id=123
页面。
当他们要求/users/123
时,如何引导他们或任何其他用户切换到/profile.php?id=123
?
为了确保,我需要这样做:
/profile.php?id=123
/users/123
,状态码为301 /profile.php?id=123
并将HTML返回给用户答案 0 :(得分:0)
RewriteCond %{QUERY_STRING} ^id\=(\d+)
RewriteRule ^users/profile\.php$ /users/%1 [R=301,L]
答案 1 :(得分:0)
您需要两条规则:
将/users/profile.php?id=123
外部重定向到/users/123
:
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^/users/profile\.php$ /user/%1 [R=307,L]
内部转发/user/123
至/users/profile.php
:
RewriteRule ^user/([0-9]+)$ /users/profile.php?id=$1 [L]
我将/users
更改为/user
,因为该网址描述的是单个用户。
(这些都来自内存,没有经过实际测试。但基本思路是第一条规则中的[R=307]
标志。)
答案 2 :(得分:0)
将.htaccess
与:
RewriteRule ^users/(\d+)/?$ /users/profile.php?id=$1 [L]
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^users/profile\.php$ /users/%1 [R=301,L]
为了避免循环,我会更改通常没有人需要知道的页面名称(profile.php - > profileNEW.php)