我正在开发简单的php网站,它有两个子网站:leasing.php和article.php。
我希望用户看到这样的子网站:
http://domain/leasing(显示leasing.php) - 这很好用
http://domain/leasing/article-name(显示article.php?alias = $ 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]
如何更改RewriteRules以在浏览器中查看article.php页面?
答案 0 :(得分:1)
尝试
RewriteEngine on
RewriteRule ^leasing$ leasing.php [NC,END]
RewriteRule ^leasing/(.*)/?$ article.php?alias=$1 [NC,END]
您遇到了麻烦,因为您的两条规则都与路径/leasing/article-name
匹配,并且因为网址重复首先按照先到先得的原则进行,所以解析器甚至都没有看过您的上一条规则。
修复方法是更改第一个规则,以便尽管它与/leasing
匹配,但它不再匹配/leasing/article-name
。最简单的方法是在租赁后立即用$
结束模式。之后发生的任何路径将不再与第一条规则匹配。
我使用的旗帜与你的旗帜略有不同。虽然您有L
,但我使用END
。区别很小,但基本上如果您知道这是此路径(最终目的地)所需的最后一次重写,请使用END
。
答案 1 :(得分:1)
看看leasing.php的改写规则:
RewriteRule ^leasing leasing.php [NC,L]
条件为^leasing
,表示“所有开始与leasing
”。这也匹配leasing/article-name
网址。
在结束条件表达式($
)中添加^leasing$
(代表字符串的结尾)符号,使其仅与leasing
网址完全匹配而不是其他人。
RewriteRule ^leasing$ leasing.php [NC,L]