我知道还有其他类似的问题..但我真的很难用mod_rewrite语法,所以我可以使用一些帮助。
基本上,我要做的是发生以下重定向:
domain.com/1/
重定向到domain.com/?id=$1
(也适用于www.domain.com
)
到目前为止我做了什么(这是行不通的):
RewriteEngine On
ReRewriteRule ^/([0-9])$ /?id=$1
答案 0 :(得分:1)
一些问题。
首先是术语:如果你想要当用户输入domain.com/1/,请求由index.php?id = 1提供时,那么你要重写/ 1 /到index.php?id = 1,不像你说的那样。
其次,简单的拼写错误:RewriteRule
,而不是ReRewriteRule
。
其次,[0-9]
是匹配数字的正确方法,但它只匹配一个数字。如果您要处理/ 13,则应通过编写[0-9]
来匹配一个或多个实例[0-9]+
。
第三,规则的目标应该是您要提供的文件。 /
不是文件或绝对网址,如果这就是您的意思,请写出index.php
。
第三,你说你想处理/1/
,但是你的规则说匹配的请求必须以数字结尾,而不是斜杠。如果您想接受斜杠是否存在,请将其放入规则中。
RewriteRule ^/?([0-9]+)/?$ index.php?id=$1 [L]
这有用吗?
答案 1 :(得分:1)
你有三个问题:
迈克尔指出, RewriteRule
是错误的,你需要担心尾随斜线,你需要在找到匹配时停止处理规则:
RewriteRule ^/(\d+)/?$ /?id=$1 [L]
答案 2 :(得分:0)
你拼错了RewriteRule
。否则,我认为你的语法看起来是正确的。
RewriteEngine On
ReRewriteRule ^/([A-Za-z0-9]+)$ /?id=$1
--^^^---------
实际上,您应该删除/
:
RewriteEngine On
RewriteRule ^([A-Za-z0-9$_.+!*'(),-]+)$ /?id=$1
------^^^---------
编辑添加了+
。看看这里的所有答案。除了我在这里之外,您还需要它们的组合。,包括+
和[L]
。
EDIT2 也进行了修改,以在ID中包含字母字符。
EDIT3 为正则表达式添加了特殊字符。这些应该在URL中有效,但在那里找到它们是不常见的。