使用Apache的mod_rewrite传入“unfollow”标志GET参数

时间:2010-10-31 04:29:25

标签: php apache mod-rewrite get

编辑 @mootinator已经完成了很棒的工作。请参阅下面的答案。

由于我不清楚指定我的确切URI,它仍然可以帮助那些寻找类似东西的人。我的URI更像是:9/Here-is-some-text/unwatch

...在这种情况下,您需要mod_rewrite规则看起来更像这样:

RewriteEngine on
RewriteRule ^([0-9]+)/([a-zA-Z0-9_-]+)/?$ index.php?id=$1 [QSA,L]
RewriteRule ^([0-9]+)/([a-zA-Z0-9_-]+)/unwatch/?$ index.php?id=$1&unwatch=1 [QSA,L]

对@ mootinator的答案进行了相当小的修改,但是我花了几分钟才弄清楚自己。可以帮助别人节省时间。


我正在尝试mod_rewrite传递一个GET参数,一种布尔标记,这样每当有人进入URI/unwatch时,你都可以拉出{{1} }}

我已经有了这个规则:

&unwatch=1

我想有另一条规则做这样的事情:

RewriteRule ^(\d+)/* index.php?id=$1 [L]

“目录”RewriteRule ^(\d+)/unwatch index.php?id=$1&unwatch=1 [L] 一个目录。目录结构如下所示:

./unwatch

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:3)

RewriteRule ^([0-9]+)/?$ index.php?id=$1 [QSA,L]
RewriteRule ^([0-9]+)/unwatch/?$ index.php?id=$1&unwatch=1 [QSA,L]

QSA代表查询字符串追加。这样,用户传递的参数不会被删除。

如果我遗漏了一些涉及到不是真实目录的网址,请查看CakePHP如何做到这一点。

使用以下.htaccess工作演示here

<IfModule mod_rewrite.c>
   RewriteBase /mod_rewrite
   RewriteEngine on
   RewriteRule ^([0-9]+)/?$ index.php?id=$1 [QSA,L]
   RewriteRule ^([0-9]+)/unwatch/?$ index.php?id=$1&unwatch=1 [QSA,L]
</IfModule>

原来我在[QSA,L]中的空间导致了500错误,并且\ d的行为与我的预期不符。