.htaccess用于扁平链接的RewriteRule

时间:2011-06-21 17:00:31

标签: php apache .htaccess mod-rewrite

我是使用RewriteRule的新手,所以我可能会遗漏一些明显的东西,但我有一个PHP脚本,它接受这样的URL变量:

{baseurl}properties.php?prop=Property-Name

我想创建RewriteRules,以便任何输入此脚本名称/变量组合的人都会将其URL重写为:

{baseurl}/properties/Property-Name

除了确保输入flat-link url的任何人,实际上使用正确的变量名称和值调用脚本。

我指的是this link,我找到了相关的主题:

Mod_rewrite flat links

Mod_rewrite trouble: Want to direct from ?= to a flat link, nothing seems to work

但是,我显然做错了,因为我无法让这个URL以我想要的方式工作。我目前正在使用以下代码,它似乎什么都不做(除了重写URL以包含www,并将index.php的请求重定向到站点根目录):

RewriteEngine ON
RewriteCond %{HTTP_HOST} ^baseurl.com$ [NC]
RewriteRule ^(.*)$ http://www.baseurl.com/$1 [R=301,L]
RewriteRule ^index.php / [R=301,L]
RewriteRule ^properties/([0-9A-Za-z]+)/$ /properties.php?prop=$1

问题显然是最后一次RewriteRule,假设上面没有任何影响它。再说一遍,我可能会做一些荒谬的事情。有人可以解释一下我做错了吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

快速浏览一下,您似乎忘记在正则表达式中包含短划线,并且包含尾部斜线。请改用:

RewriteRule ^properties/([0-9A-Za-z-]+)$ /properties.php?prop=$1

答案 1 :(得分:2)

如果查看规则^properties/([0-9A-Za-z]+)/$,您会发现它需要以正斜杠结束。您可以将其删除,也可以将其设为可选项,例如^properties/([0-9A-Za-z]+)/?$