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

用于创建用户友好URL的Apache重写规则,apache,mod-rewrite,url-rewriting,rewrite,Apache,Mod Rewrite,Url Rewriting,Rewrite,我是一个相对较新的重写和不能得到以下工作。(很明显,我的域名不是测试网站,但我不希望我的域名公开,因为它还没有完成。) 我想重写testsite/fishing/region/region.php?region=fife 致: testsite/fishing/fife.php 然后想重写testsite/fishing/region/fishiry/fishiry.php?url=goldenloch 到 testsite/fishing/fife/goldenloch.php 我使用以下规则

我是一个相对较新的重写和不能得到以下工作。(很明显,我的域名不是测试网站,但我不希望我的域名公开,因为它还没有完成。)

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

致:

testsite/fishing/fife.php

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

testsite/fishing/fife/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]标志,我认为它应该停止任何其他重写规则的条件得到满足。然而,这仍然不起作用

我试过这个,它似乎奏效了:

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
,以便用户在浏览器中看不到真实的url

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

curl -vv 'http://localhost/fishing/fife/goldenloch.php'
您将在服务器的响应中看到
Location
头,这是工作时的重定向。就我而言,我看到:

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


结果证明我需要这么做

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

首先使用较长的查询,结果很好

看起来第一个重写行与两个URL都不匹配。第二行重写将只匹配第一个url。为什么?第一条规则应该匹配并生成fishing/fife.php?任何更正都会有帮助:)别介意我的评论,我被你想要重写的方向弄糊涂了。似乎不起作用/fishing/fife.php转到404。htaccess仅放在网站根目录中。。这会引起问题吗?在此服务器上找不到请求的URL/fishing/fife/goldenloch.php。虽然region.php位于正确的位置(fishing/region/region.php),但/fishing/region/region.php?region=fife工作正常。显然,.htaccess可能是问题所在。尝试将conf放在主apachehttpd.conf中,看看它是否在那里工作。如果是这样,那么您需要在中设置
AllowOverride
,如
AllowOverride All
,如果您真的想使用.htaccess文件。如果我只在.htaccess文件中放置一个规则,那么它可以正常工作。当我将它们都放在文件中时,只有后面的一个起作用。在钓鱼的前面加上/使它们都不起作用。嗯,我想我现在应该看看
RewriteLogLevel
,也许日志会帮助你解决问题。祝你好运。我四月份的日志超过4mb,1678页,超过230000字。甚至不知道从哪里开始寻找。我的重写条件与我见过的其他条件相比似乎没有那么复杂。我打赌在某个地方有一个小错误,如果有人能帮助指出这样的错误或提供一个替代的工作解决方案,我将非常感激。谢谢你的帮助,史蒂夫
    RewriteRule ^fishing/([^/]*)/([^/]*) fishery.php?url=$2&region=$1 [L]
    RewriteRule ^fishing/([^/]*) region.php?region=$1 [L]