我想重写一个像:
这样的网址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]
但它无法正常工作。我做错了什么?
答案 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。这几乎是一回事,在任何一种情况下你都要编写代码。