有关特定mod_rewrite语法的问题

时间:2011-07-18 23:36:50

标签: apache .htaccess mod-rewrite

我知道还有其他类似的问题..但我真的很难用mod_rewrite语法,所以我可以使用一些帮助。

基本上,我要做的是发生以下重定向:

domain.com/1/重定向到domain.com/?id=$1(也适用于www.domain.com

到目前为止我做了什么(这是行不通的):

RewriteEngine On
ReRewriteRule ^/([0-9])$ /?id=$1

3 个答案:

答案 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中有效,但在那里找到它们是不常见的。