regex - 如果目录后面有东西,但不是目录本身,则重定向
问题描述
我想重定向 URI 后面的内容,但我一直遇到麻烦。
基本上,我想/from/here/1234
重定向到/to/there.php?id=1234
. 但是,只有在 URI 使用我的模式之后的某些内容(例如/form/here/1234/edit
.
这是“工作”规则:
RewriteEngine on
RewriteCond "%{REQUEST_URI}" !-d
RewriteRule ^from/here/(.*)/edit/?$ /to/there.php?id=$1
我已经尝试过使用和不使用RewriteCond
, 并进行以下更改:
如果我删除
/edit
,那么规则是RewriteRule ^from/here/(.*)/?$ /to/there.php?id=$1`
我收到“内部服务器错误”和“此外,在尝试使用 ErrorDocument 处理请求时遇到了 500 内部服务器错误错误。”
我无法访问
/from/here
或/from/here/
使用此规则。如果我添加一个前导斜杠,删除
/edit
and?
,这样规则就是RewriteRule ^/from/here/(.*)/$ /to/there.php?id=$1
我可以使用此规则访问
/from/here
和,但不能访问(404)。/from/here/
/from/here/1234
我创建了一个测试 404 页面只是为了打印
$_SERVER
变量,并且没有什么奇怪的REQUEST_URI
(即显示为/from/here/1234
)。如果我删除
/edit
and?
,那么规则是RewriteRule ^from/here/(.*)/$ /to/there.php?id=$1
它仅在有斜杠时才有效,除非我添加规则
RewriteRule ^from/here/([a-z0-9\-]+)$ /from/here/$1/ [NC]
虽然这有效,但感觉不对劲......
我必须在这里遗漏一些简单/基本的东西,因为我一直在努力自己寻找任何有用的东西(这几乎总是意味着我愚蠢地错过了一些“掌上脸”/“头墙”的东西)。我对编辑 .htaccess 文件不是很熟悉,所以这没有帮助。
TL;DR - 我想重定向斜线后面的内容,但前提是它后面确实有东西。前进/from/here/1234
,但不是/from/here
或/from/here/
。
解决方案
我知道......正则表达式太包容了。将规则更改为
RewriteRule ^from/here/([a-z0-9\-]+)/?$ /to/here.php?id=$1 [NC]
一切都很好。
推荐阅读
- mysql - MySQL:优化子查询
- c - C 接收来自特定进程的信号
- python - 如何在 FastAPI 中加载 index.html
- sql - 根据sql中的日期从表中获取计数列表
- python - Python:AttributeError:模块“camelot”没有属性“read_pdf”
- r - 如何根据一列中的多个变量进行子集化
- python - 检测 QWebEngineView 上的鼠标点击
- javascript - 在 Visual Studio 代码中运行 Javascript
- c - C中的程序,它读取声音数据并检查给定数据是否满足wav文件的先决条件
- git - Jenkins 中的代码更改未显示在 BitBucket 存储库中