用于创建用户友好URL的Apache重写规则
我是一个相对较新的重写和不能得到以下工作。(很明显,我的域名不是测试网站,但我不希望我的域名公开,因为它还没有完成。) 我想重写testsite/fishing/region/region.php?region=fife 致: testsite/fishing/fife.php 然后想重写testsite/fishing/region/fishiry/fishiry.php?url=goldenloch 到 testsite/fishing/fife/goldenloch.php 我使用以下规则用于创建用户友好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 我使用以下规则
RewriteRule ^fishing/([^/]*)\.php$ /fishing/region/region.php?region=$1 [L]
RewriteRule ^fishing/([^/]*)/([^/]*)\.php$ /fishing/region/fishery/fishery.php?url=$2®ion=$1 [L]
每一条规则都有自己的作用,但当组合起来时,只有最后一条规则起作用。我已经添加了[L]标志,我认为它应该停止任何其他重写规则的条件得到满足。然而,这仍然不起作用 我试过这个,它似乎奏效了:
RewriteRule ^/fishing/([^/]*)\.php$ /fishing/region/region.php?region=$1 [R,L]
RewriteRule ^/fishing/([^/]*)/([^/]*)\.php$ /fishing/region/fishery/fishery.php?url=$2®ion=$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®ion=$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®ion=$1 [L]
RewriteRule ^fishing/([^/]*) region.php?region=$1 [L]