基本的mod_rewrite问题

时间:2009-07-13 16:04:39

标签: .htaccess mod-rewrite

我正在尝试写一条说

的规则

xyz.com/hotels_in_someplace将指向xyz.com/test.php?place=someplace

在我的htaccess中使用以下内容

RewriteEngine On
RewriteBase /

RewriteRule ^hotels_in_([a-z]+)$ test.php?place=$1 [L]

但它不起作用,我无法弄清楚为什么,我正在运行一个wamp服务器作为开发。当我试图运行xyz.com/test.php?place=someplace(目录中没有htaccess)时它可以工作,但我怀疑我的规则是错误的。

附加: 哎呀....我的哑屁股错误,mod_rewrite没有启用......

3 个答案:

答案 0 :(得分:1)

尝试没有终点线锚($)

RewriteRule ^/hotels_in_([a-z]+) /test.php?place=$1 [L]

另外,您是否允许解析.htaccess文件?

答案 1 :(得分:0)

更新:之前我没有注意到问题中的RewriteBase所以我对前导斜杠的观点是null。但是RewriteRule可以在我的机器上运行。


尝试:

RewriteRule ^hotels_in_([a-z]+)$ /test.php?place=$1 [L]

test.php的路径需要前导斜杠。您进行重写的方式将被重定向到xyz.com/path/to/web/docs/on/machine/test.php,这不是您想要的。 :)

此外,如果您在测试中包含尾部斜杠。

上述规则与xyz.com/hotels_in_someplace/不匹配。

要匹配前导斜杠,这应该有效:

RewriteRule ^hotels_in_([a-z]+)/?$ /test.php?place=$1 [L]

答案 2 :(得分:0)

你的例子适合我。可能需要进行一些小的调整(参见我的示例,其中捕获大写字母,连字符和下划线(对于具有多个单词的国家/地区的酒店(United-state,united_states))和尾随斜杠)。

RewriteRule ^hotels_in_([A-Za-z_-]*)(/?)$ /test.php?place=$1

希望有所帮助。