-1

我有以下代码,

details.php工作正常。但是当我访问gotolink.php时,它再次在details.php页面中引导我,这给了我 404 错误,因为它的意外 url..

RewriteEngine On

RewriteRule ^([a-zA-Z0-9-/]+)$ uk/details.php?pid=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ uk/details.php?pid=$1

RewriteRule ^([a-zA-Z0-9-/]+)$ gotolink/gotolink.php?id=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ gotolink/gotolink.php?id=$1

请帮忙!

4

2 回答 2

2

重写条件是相同的,所以第一个将捕获所有请求,它永远不会到达 gotolink.php

于 2012-07-25T19:08:50.270 回答
2

details.php和的正则表达式gotolink.php是相同的,apache 无法判断是否http://domain.com/abc123应该重写/uk/details.php?pid=abc123/gotolink/gotolink.php?id=abc123因为 URI/abc123匹配这两个:

RewriteRule ^([a-zA-Z0-9-/]+)$ uk/details.php?pid=$1

RewriteRule ^([a-zA-Z0-9-/]+)$ gotolink/gotolink.php?id=$1

details.php 是第一位的,这就是为什么所有内容都被重写为 details.php 的原因。如果你交换它们,一切都会被重写为 gotolink.php。您必须使这些正则表达式匹配不同。例子:

RewriteRule ^d/([a-zA-Z0-9-/]+)$ uk/details.php?pid=$1

RewriteRule ^g/([a-zA-Z0-9-/]+)$ gotolink/gotolink.php?id=$1

所以现在/d/abc123去去去。/uk/details.php?pid=abc123_ 或者,如果详细信息 pid 始终是字母并且 gotolink id 始终是数字或其他内容,您可以将它们分开:/g/abc123/gotolink/gotolink.php?id=abc123

RewriteRule ^([a-zA-Z-/]+)$ uk/details.php?pid=$1

RewriteRule ^([0-9-/]+)$ gotolink/gotolink.php?id=$1
于 2012-07-25T19:09:02.370 回答