2012-03-30 76 views
0

我相对较新的重写和不能得到以下工作。 (显然我的域名并没有在测试网站,但不希望我一个适当上市作为其尚未完成。)Apache重写规则用于创建用户友好的URL

我想重写测试网站/渔业/区域/ region.php区=笛

来?

测试网站/钓鱼/ fife.php

然后要重写测试网站/渔业/区域/渔业/ 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]标志,我认为应该停止符合条件的任何其他重写规则。然而这仍然不起作用。

+0

看起来不像第一个重写行将匹配任一个url。第二个重写行只会匹配第一个url。 – 2012-03-30 22:14:56

+0

怎么回事?第一条规则应该匹配并产生钓鱼/ fife.php? 任何更正将有所帮助:) – 2012-03-30 22:43:01

+0

不要介意我的评论,我对你想要重写的方向感到困惑。 – 2012-03-30 23:44:12

回答

0

原来我需要做

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

带有较长的查询第一,它工作得很好。

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 
+0

似乎没有工作../fishing/fife.php转到404 .htaccess被放置在网站的根目录..这可能会导致问题? 在此服务器上找不到请求的URL /fishing/fife/goldenloch.php。 虽然region.php是在正确的地方(fishing/region/region.php) 也/ fishing/region/region.php?region=fife正常工作。 – 2012-04-01 23:48:26

+0

绝对是。htaccess可能是问题。尝试把conf放在主要的apache httpd.conf中,看看它是否在那里工作。如果是这样,那么如果你真的想要使用.htaccess文件,那么你需要设置'AllowOverride',就像你的中的'AllowOverride All'一样。 – 2012-04-02 16:04:04

+0

如果我只放在.htaccess文件中的规则之一,那么它工作正常。当我把它们放在只有后面一个工作的文件中。把钓鱼/面前摆在一起,使他们都没有工作。 – 2012-04-02 18:16:35