首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >htaccess文件上的Regex会产生内部重定向错误。

htaccess文件上的Regex会产生内部重定向错误。
EN

Stack Overflow用户
提问于 2021-05-31 12:24:14
回答 1查看 46关注 0票数 1

我正在尝试创建一个与以下urls匹配的重定向规则:

代码语言:javascript
复制
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/v-9/
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/9/
en/property/rotterdam-centrum/appartment/lorem-ipsum-dolor-sit-amet/9
en/property/lorem-ipsum-dolor-sit-amet-9/
en/property/lorem-ipsum-dolor-sit-amet/v9/
en/property/lorem-ipsum-dolor-sit-amet/v-9/
en/property/lorem-ipsum-dolor-sit-amet/v-9
en/property/rotterdam/apartment/branch/lorem-ipsum-dolor-sit-amet-9/
en/property/rotterdam/lorem-ipsum-dolor-sit-amet-9/
en/property/rotterdam/lorem-ipsum-dolor-sit-amet-9434343/
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/v-243249/
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/v2342349/
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/243249/
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/v-9/
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/v-9/?test=1
en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/v-9/test/one/?success=3
en/property/rotterdam/apartment/2-rooms/lorem-ipsum-dolor-sit-amet/v-9/blah/1234/blahh/55555/?sass=123
en/property/rotterdam/appartment/lorem-ipsum-dolor-sit-amet/9234234
en/property/rotterdam/lorem-ipsum-dolor-sit-amet/9234234
en/property/lorem-ipsum-dolor-sit-amet/9234234
en/property/9234234
en/property/rotterdam/appartment/lorem-ipsum-dolor-sit-amet/9/test/132?algo=123

需要匹配的所有urls都可以在这里看到。

https://regex101.com/r/4TPEhy/1

我面临的两个问题--first one是两个urls不匹配的问题:

代码语言:javascript
复制
en/property/rotterdam/apartment/2-rooms/lorem-ipsum-dolor-sit-amet/v-9/blah/1234/blahh/55555/?sass=123
en/property/9234234

第二个,那个正则表达式上的某个东西导致了一个内部重定向错误。

这是我的准则(到目前为止我得到的最好的案例)

代码语言:javascript
复制
^(en\/)?property\/[A-Яa-я0-9\-_\/]+?([\d]+)(.*)$

这是我重写的规则

代码语言:javascript
复制
RewriteRule ^(en\/)?property\/[A-Яa-я0-9\-_\/]+?([\d]+)(.*)$ $1properties/property/$2$3&%{QUERY_STRING} [NC,L]

regex在这个工具(regex101)上似乎运行得很好,但是只要尝试刷新应用该规则的页面,我就会得到一个500 -内部服务器错误

我需要匹配所有的案例,我尝试了几个小时不同的组合,但我错过了导致这些问题的东西。

在.htaccess上,我需要的组是$2和$3,因为$2包含我在脚本上使用的属性ID,$3和任何其他额外的参数或查询字符串一样都是URL的其余部分。

这么多不同配置的原因是用户可以设置自己的URL格式,但仅限于上面列出的选项。

这是请求此URL时apache日志的摘录

代码语言:javascript
复制
https://localhost/en/property/rotterdam/apartment/lorem-ipsum-dolor-sit-amet/v-9/test/132?blah=123

日志

代码语言:javascript
复制
php74         | [Mon May 31 12:19:12.375537 2021] [rewrite:trace3] [pid 64] mod_rewrite.c(483): [client 172.18.0.1:63664] 172.18.0.1 - - [localhost/sid#7fd3d4ab1958][rid#7fd3d29d73c0/initial/redir#10] [perdir /var/www/html/] add per-dir prefix: en/properties/property/9/test/132&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123 -> /var/www/html/en/properties/property/9/test/132&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123&blah=123
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 06:33:17

您可以尝试以下重写规则:

代码语言:javascript
复制
RewriteEngine On

RewriteRule ^(en/)?property/(?:\S*?[-/v])?(\d+)(/.*)?$ $1properties/property/$2$3 [NC,L]

更新的RegEx演示

我们在-/v字符之后捕获属性ID。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67773685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档