apache .htacces - rewrite to url


apache .htacces - rewrite to url

我正在研究简单的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]