Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用GET参数为URL创建重写规则?_Regex_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Regex 如何使用GET参数为URL创建重写规则?

Regex 如何使用GET参数为URL创建重写规则?,regex,.htaccess,mod-rewrite,url-rewriting,Regex,.htaccess,Mod Rewrite,Url Rewriting,我正在尝试重写这种类型的URL: 到 这也应该是递归的,这意味着: 应改写为: 到目前为止,我的.htaccess中有这个(用arkasha的修改): 重新启动发动机 重写基/ 重写规则^index\.php$-[L] 重写cond%{REQUEST_FILENAME}-F 重写cond%{REQUEST_FILENAME}-D 重写规则/index.php[L] #重写语言参数 重写cond%{QUERY_STRING}(^ |&)lang=(\w+) 重写规则/?(\w+/?$%1

我正在尝试重写这种类型的URL:

这也应该是递归的,这意味着:

应改写为:

到目前为止,我的.htaccess中有这个(用arkasha的修改):


重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#重写语言参数
重写cond%{QUERY_STRING}(^ |&)lang=(\w+)
重写规则/?(\w+/?$%1-$1[结束]

但这似乎不起作用。

您需要使用重写条件从查询字符串中捕获令牌,然后可以在重写规则中使用它:

RewriteEngine on
RewriteCond %{QUERY_STRING} (^|&)lang=(\w+)
RewriteRule /?(\w+)/?$ %1-$1 [END]

该规则集应该在http服务器主机配置中或在动态配置文件(“.htaccess”样式文件)中同样工作,但是您应该优先选择第一个选项。显然,重写模块需要加载到http服务器中,并在http主机内启用。如果您决定使用一个动态配置文件,您还需要确保它的解释完全启用,并且它位于正确的位置

RewriteRule^([^/]+)$http://www.example.com/%1-$1? [NC,L,R]
应该将
/news/?lang=en
重定向到
/en news
。为什么要在每个目录组件之前添加
en-
?@anubhava这是一个多语言网站,这就是url中定义语言的方式。好的,我理解多语言部分,但url可以是
http://www.example.com/en/news/hello/world/
而不是
http://www.example.com/en-news/en-hello/en-world/
我只能在.htaccess中执行此操作,我还应该指定这是一个Wordpress站点。我包括了代码(见我更新的帖子),但它似乎没有任何作用。多个规则是自上而下处理的。您可能需要在第一个规则之后将规则向上移动。
RewriteEngine on
RewriteCond %{QUERY_STRING} (^|&)lang=(\w+)
RewriteRule /?(\w+)/?$ %1-$1 [END]