Regex 用重写规则重定向

Regex 用重写规则重定向,regex,mod-rewrite,Regex,Mod Rewrite,如何使用重写规则重定向? 发件人: 致: 当然,“某些东西”可能会改变。url的其他部分将始终相同。 最后,我想使用带有参数集的test.php: $url = $_GET['url']; echo $url; 我已删除.htaccess中的所有其他规则,以确保没有冲突。请解释一下解决办法。我对regex非常陌生。试试: RewriteEngine On RewriteBase / # at the entrance of RewriteRule: ca/blog/something Rew

如何使用重写规则重定向?
发件人:

致:

当然,“某些东西”可能会改变。url的其他部分将始终相同。
最后,我想使用带有参数集的
test.php

$url = $_GET['url'];
echo $url;
我已删除.htaccess中的所有其他规则,以确保没有冲突。请解释一下解决办法。我对regex非常陌生。

试试:

RewriteEngine On

RewriteBase /
# at the entrance of RewriteRule: ca/blog/something
RewriteRule ^ca/blog/(.*)$ ca/test.php?url=$1 [QSA]
# after transformation: "ca/blog/something" -> "ca/test.php?url=something"
它捕获
/blog/
之后的所有内容,并将其作为参数提供给
test.php
。句号(.)表示“每个字符”,星号(*)表示“尽可能多(或没有)”,括号将捕获结果。如果要确保
test.php
中的url参数不为空,可能需要使用加号(+),如下所示:


这意味着“尽可能多的字符,但必须至少有一个”。此外,如果我在bowser中编写您的解决方案,则有以下原因。

在该服务器上找不到请求的URL/ca/blog/something。如果写www.example.com/ca/test.php?url=something:“something”你把
.htaccess
文件放在哪里了?它必须位于根文件夹中。是的,它位于根文件夹中。昨天我还有其他的规则。我不知道为什么,我只是对此有问题。看到我更新的答案,在开始时不要使用“^”来尝试。如果有其他“重写规则”,我应该在每个“重写规则”之前打开“重写引擎”,还是只打开一次?为什么要打开“重写库/”我想我也必须在之前打开“重写引擎”?@Nrc yep,您应该在文件开头写入
RewriteEngine On
。我认为在您的情况下,
RewriteBase
不是必需的。@Nrc当替换URI包含查询字符串时,RewriteRule的默认行为是放弃现有的查询字符串,并将其替换为新生成的查询字符串。使用[QSA]标志会导致合并查询字符串。我不明白为什么这里需要这样做?如果我理解的话:这是一个非常具体的案例的复杂化问题出了什么问题,为什么是否定点?
$url = $_GET['url'];
echo $url;
RewriteEngine On

RewriteBase /
# at the entrance of RewriteRule: ca/blog/something
RewriteRule ^ca/blog/(.*)$ ca/test.php?url=$1 [QSA]
# after transformation: "ca/blog/something" -> "ca/test.php?url=something"
RewriteEngine On
RewriteRule ca/blog/(.*)$ /ca/test.php?url=$1 [L,R=301]
RewriteRule ca/blog/(.+)$ /ca/test.php?url=$1 [L,R=301]