mod_rewrite显示URL更改,虽然我不明白为什么

时间:2011-03-25 23:53:15

标签: ruby-on-rails mod-rewrite passenger

我试图简单地将domain.net/abc作为/ s2传递给Rails应用程序?alt_url = abc并且我不希望URL在浏览器中显示已更改。我已经用这个很长一段时间了。我可以让重写工作(应用程序运行正常),但URL总是在浏览器中换出。

RewriteEngine On
RewriteRule ^/([a-zA-Z0-9_-]+)$ /s2?alt_url=domain.net\%2F$1 [PT]

如果我不使用[PT],那么我的最终规则无法正确传递到Rails应用程序。我正在运行乘客,根据http://code.google.com/p/phusion-passenger/issues/detail?id=230的讨论,我必须使用[PT],并注意不要做任何其他疯狂的事情。所以我不确定为什么传递选项强制外部重定向,但似乎有必要这样做。

有人知道如何在不改变Rails应用程序的情况下避免更改URL吗?

非常感谢任何帮助。 菲尔

2 个答案:

答案 0 :(得分:0)

您显然会获得外部重定向(HTTP 302或类似内容),并使用[R]强制执行此操作。我想你应该简单地删除[R]。

More about the R flag

更新Ẁ我想一想,将域名更改为(在这种情况下为http://domain.net/home)并始终是外部重定向。

我建议使用单独的规则来更改域名和处理最终域名上的各种路径。

答案 1 :(得分:0)

不熟悉rails,但这个例子可以帮到你。这个重写规则在/ ie之后需要任何东西(字母数字,_和 - )。 site.com/value

RewriteRule ^([a-zA-Z0-9_-]+)$ /file.php?variable=$1

其中^([a-zA-Z0-9 _-] +)$是一些正则表达式,我曾经在网址后取任何东西,并把它放在$ 1

这会将您的网址保留为site.com/value

编辑:我如何使用它的一个示例:grwl.it/kirbdee,它保留原样的url但是底层调用一个php作为变量传入kirbdee。