Apache重写规则,用于创建用户友好的URL

时间:2012-03-30 21:48:21

标签: apache mod-rewrite url-rewriting rewrite

我是相对较新的重写,无法让以下工作。 (显然我的域名不是testsite,但是不希望我的域名正在公开,因为它尚未完成。)

我想重写testsite / fishing / region / region.php?region = fife

为:

测试网站/钓鱼/ fife.php

然后想重写testsite / fishing / region / fishery / fishery.php?url = goldenloch

测试网站/钓鱼/笛/ goldenloch.php

我使用以下规则

    RewriteRule ^fishing/([^/]*)\.php$ /fishing/region/region.php?region=$1 [L]
    RewriteRule ^fishing/([^/]*)/([^/]*)\.php$ /fishing/region/fishery/fishery.php?url=$2&region=$1 [L]

每个规则都可以自行运行,但只在最后一个工作时合并。我添加了[L]标志,我认为应该停止满足条件的任何其他重写规则。但是这仍然不起作用。

2 个答案:

答案 0 :(得分:0)

我试过这个似乎有效:

RewriteRule ^/fishing/([^/]*)\.php$ /fishing/region/region.php?region=$1 [R,L]
RewriteRule ^/fishing/([^/]*)/([^/]*)\.php$ /fishing/region/fishery/fishery.php?url=$2&region=$1 [R,L]

与您的唯一区别(我认为)是领先/,我使用重定向(R)只是为了看它正在运作。您应该可以删除R,以便用户无法在浏览器中看到真实的网址。

如果你不是,我会建议使用命令行工具(如curl)而不是浏览器来测试它,这样你就可以避免任何缓存或其他麻烦:

curl -vv 'http://localhost/fishing/fife/goldenloch.php'

您将在服务器的响应中看到Location标头,这是重定向工作。就我而言,我看到了:

Location: http://localhost/fishing/region/region.php?region=fife

Location: http://localhost/fishing/region/fishery/fishery.php?url=goldenloch&region=fife

答案 1 :(得分:0)

原来我需要做

    RewriteRule ^fishing/([^/]*)/([^/]*) fishery.php?url=$2&region=$1 [L]
    RewriteRule ^fishing/([^/]*) region.php?region=$1 [L]
首先使用较长的查询

并且它工作正常。