我想重定向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
和?
,以使规则为
RewriteRule ^/from/here/(.*)/$ /to/there.php?id=$1
我可以使用此规则访问/from/here
和/from/here/
,但不能访问/from/here/1234
(404)。
我创建了一个测试404页面,仅用于打印$_SERVER
变量,而REQUEST_URI
看起来并不奇怪(即显示为/from/here/1234
)。
如果我删除了/edit
和?
,则规则是
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/
。
答案 0 :(得分:0)
我知道……正则表达式太包容了。将规则更改为
RewriteRule ^from/here/([a-z0-9\-]+)/?$ /to/here.php?id=$1 [NC]
一切都很好。
答案 1 :(得分:0)
最简单的修改是将.*
更改为.+
,以便在/from/here/
之后必须有任何东西。
RewriteRule ^/from/here/(.+)$ /to/there.php?id=$1
如果您不希望在$1
中包含斜杠,则可以通过添加问号使.+
变得非贪婪。将其设置为非贪婪将确保/?
捕获任何尾随的斜杠,而不是.+
这样做。
RewriteRule ^/from/here/(.+?)/?$ /to/there.php?id=$1