我该怎么做,重写一个URL?从
test.php?url=username
至
test/username/
我在.htaccess文件中尝试过这个方法,但没有成功。
.htaccess
RewriteCond %{QUERY_STRING} ^name=(.+)$ RewriteRule /test.php$ /test/%1 [E=FILENAME:%1]
k3fezbri1#
按照你所建议的方向“重写”请求是没有意义的,你把请求 * 从 * /test/username/(所需的“漂亮”URL)重写为/test.php?url=username(实际处理请求的底层URL/文件路径)。因此,您应该在HTML源代码中链接到/test/username/。然后你可以在.htaccess中使用mod_rewrite来执行必要的内部重写,将visible/pretty转换为你的服务器可以理解的底层URL/file-path。例如:
/test/username/
/test.php?url=username
# Ensure that MultiViews is disabled Options -MultiViews RewriteEngine On RewriteRule ^test/([^/]+)/$ test.php?url=$1 [L]
请注意,需要禁用多视图才能使其工作。还要注意的是,在.htaccess(一个 directory 上下文)中,RewriteRulepattern 匹配的URL路径不是以斜杠开头的。我还从 substitution 字符串中省略了斜杠前缀,以便重写为文件路径(而不是URL路径)。
RewriteRule
这是试图做“相反”的事情,并期望来自客户端的请求的格式为/test.php?name=username-如果你想让URL“看起来像”/test/username/,这是没有意义的。你还省略了 substitution 字符串(第二个参数)的尾部斜杠。您还出于某种原因设置了一个FILENAME环境变量?
/test.php?name=username
FILENAME
1条答案
按热度按时间k3fezbri1#
按照你所建议的方向“重写”请求是没有意义的,你把请求 * 从 *
/test/username/
(所需的“漂亮”URL)重写为/test.php?url=username
(实际处理请求的底层URL/文件路径)。因此,您应该在HTML源代码中链接到
/test/username/
。然后你可以在
.htaccess
中使用mod_rewrite来执行必要的内部重写,将visible/pretty转换为你的服务器可以理解的底层URL/file-path。例如:请注意,需要禁用多视图才能使其工作。
还要注意的是,在
.htaccess
(一个 directory 上下文)中,RewriteRule
pattern 匹配的URL路径不是以斜杠开头的。我还从 substitution 字符串中省略了斜杠前缀,以便重写为文件路径(而不是URL路径)。这是试图做“相反”的事情,并期望来自客户端的请求的格式为
/test.php?name=username
-如果你想让URL“看起来像”/test/username/
,这是没有意义的。你还省略了 substitution 字符串(第二个参数)的尾部斜杠。您还出于某种原因设置了一个
FILENAME
环境变量?