我正在研究简单的php网站,它有两个子网站:租赁.php和文章.php。
我想让用户看到这样的子网站:
http://domain/leasing(显示租赁.php) - 这工作正常
http://domain/leasing/article-name (显示文章.php?别名=$variable) - 这不是
我的 .htacces 文件:
RewriteEngine on
RewriteRule ^(/$|$) index.php [NC,L]
RewriteRule ^leasing leasing.php [NC,L]
RewriteRule ^leasing/([A-Za-z0-9-]+)/?$ article.php?alias=$1 [NC,L]
如何更改重写规则以在浏览器中查看文章.php页面?
尝试
RewriteEngine on
RewriteRule ^leasing$ leasing.php [NC,END]
RewriteRule ^leasing/(.*)/?$ article.php?alias=$1 [NC,END]
您遇到了麻烦,因为由于您的两个规则都与路径/leasing/article-name
匹配,并且由于 url 重写以先到先得的方式发生,解析器甚至从未查看过您的最后一条规则。
解决方法是更改第一个规则,以便尽管它与/leasing
匹配,但它不再与/leasing/article-name
匹配。 最简单的方法是在租赁后立即以$
结束模式。 在此之后继续的任何路径将不再与第一条规则匹配。
我使用的标志与您的标志略有不同。而你有L
,我使用END
。 区别是微妙的,但基本上如果您知道这是此路径(最终目的地)所需的最后一次重写,请使用 END
.
看看租赁.php的重新调整规则:
RewriteRule ^leasing leasing.php [NC,L]
条件是^leasing
,这意味着"以leasing
开头的一切"。这也leasing/article-name
网址匹配。
在结束条件表达式 (^leasing$
) 中添加 $
(代表字符串的末尾)符号,使其仅与 url 完全匹配leasing
而与其他 url 不匹配。
RewriteRule ^leasing$ leasing.php [NC,L]