Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php htacces-重写为url_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php htacces-重写为url

Php htacces-重写为url,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我在一个简单的php网站上工作,这个网站有两个子网站:leasing.php和article.php。 我想让用户看到这样的子网站: (show leasing.php)-这很好用 (show article.php?alias=$variable)-这不是 my.htacces文件: RewriteEngine on RewriteRule ^(/$|$) index.php [NC,L] RewriteRule ^leasing leasing.php [NC,L] RewriteRule

我在一个简单的php网站上工作,这个网站有两个子网站:leasing.php和article.php。

我想让用户看到这样的子网站:
(show leasing.php)-这很好用
(show article.php?alias=$variable)-这不是

my.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] 
如何更改重写规则以在浏览器中查看article.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

试试看

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

看看leasing.php的rewirte规则:

RewriteRule ^leasing leasing.php [NC,L]
条件是
^leasing
,意思是“一切开始于
leasing
”。这也与
租赁/商品名称
url匹配

在结束条件表达式(
^leasing$
)处添加
$
(表示字符串结尾)符号,使其仅与
leasing
url完全匹配,而不与其他url完全匹配

RewriteRule ^leasing$ leasing.php [NC,L]

看看leasing.php的rewirte规则:

RewriteRule ^leasing leasing.php [NC,L]
条件是
^leasing
,意思是“一切开始于
leasing
”。这也与
租赁/商品名称
url匹配

在结束条件表达式(
^leasing$
)处添加
$
(表示字符串结尾)符号,使其仅与
leasing
url完全匹配,而不与其他url完全匹配

RewriteRule ^leasing$ leasing.php [NC,L]

虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!我认为这是多余的,因为@dragoste很好地解释了OP的问题所在,他的答案与我的答案非常接近。也许你是对的。虽然这个代码片段可以解决这个问题,但它确实有助于提高你文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!我认为这是多余的,因为@dragoste很好地解释了OP的问题所在,他的答案与我的答案非常接近。如果其中一个答案对你有帮助,请选择它(如果你愿意,请向上投票)。研究、测试和写出这些答案需要时间。如果其中一个答案对您有帮助,请选择它(如果您愿意,请向上投票)。研究、测试和写出这些答案需要时间。问和跑不是很酷。