apache .htacces - 重写为url

时间:2016-07-14 11:27:46

标签: php apache .htaccess mod-rewrite

我正在开发简单的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页面?

2 个答案:

答案 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]