我有以下代码,
details.php 工作正常。但当我访问 gotolink.php 时,它再次在 details.php 页面中指示我,这给了我404错误,因为它是意外的网址。
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
请帮忙!
答案 0 :(得分:2)
重写条件是相同的,所以第一个将捕获所有请求,它永远不会到达gotolink.php
答案 1 :(得分: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
detail.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
,/g/abc123
转到/gotolink/gotolink.php?id=abc123
。或者你可以将它们分开,如果细节pid总是字母而且gotolink id总是数字或者其他东西:
RewriteRule ^([a-zA-Z-/]+)$ uk/details.php?pid=$1
RewriteRule ^([0-9-/]+)$ gotolink/gotolink.php?id=$1