重写规则以更改网址

时间:2012-08-24 11:40:46

标签: .htaccess mod-rewrite url-rewriting

我想重写一个像:

这样的网址
http://domainname.com/all-studio-methods

要:

http://domainname.com/review.php?id=25&cas=all-studio-methods

我的.htaccess文件目前如下所示:

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^([^/\.]*)$ review.php?id=$1&cas=$2 [L]

但它无法正常工作。我做错了什么?

1 个答案:

答案 0 :(得分:1)

如评论中所述,您有这条规则:

RewriteRule ^([^/\.]*)$ review.php?id=$1&cas=$2 [L]

$1$2是反向引用,在您的reqular表达式^([^/\.]*)$中只有匹配的分组,只有1个分组,即整个匹配。因此,$2始终为空,因为您没有其他分组。这也意味着$1将是整个匹配(例如 all-studio-methods ),您将获得这样的URI:

review.php?id=all-studio-methods&cas=

哪个不是你想要的。评论询问id=25的来源。它不是来自URI /all-studio-methods。所以为了重写id=25,它必须在某个地方的URI中,例如:

http://domainname.com/25-all-studio-methods

然后你会有一条规则:

RewriteRule ^([0-9]+)-([^/\.]*)$ review.php?id=$1&cas=$2 [L]

如果你真的不想在URI中使用25-,你需要在review.php中重写php代码,这样就不会使用id。它需要在给定cas的情况下从数据库内部获取ID。

或者,您可以创建a rewrite map以便将cas映射到ID。这几乎是一回事,在任何一种情况下你都要编写代码。