繁体   English   中英

参数的mod_rewrite问题

[英]mod_rewrite issue with parameters

我有以下.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^portfolio-single/([^/.]+)/?$ portfolio-single.php?id=$1 [L]

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all 
order deny,allow
</Files>

Options -Indexes

ErrorDocument 400 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 405 /error.php
ErrorDocument 408 /error.php
ErrorDocument 500 /error.php
ErrorDocument 502 /error.php
ErrorDocument 504 /error.php

目前,所有以php扩展名结尾的页面都可以正常工作。 因此,例如现在可以通过/blog访问www.somewebsite.com/blog.php 但是我希望可以通过/portfolio-single/123访问某个页面,即portfolio-single.php?id=123 /portfolio-single/123 您可以在第4行看到我从该网站获取的代码,并且我一直在尝试使其正常运行,但是当我通过/portfolio-single/123访问Portfolio-single时,仍然得到404。 我想念什么? 后续问题是我是否必须重新启动XAMPP才能使对.htaccess文件的更改生效(到目前为止,该操作没有生效)。

尝试交换两个规则。 最后一条规则更为具体,因此应首先匹配。


虽然您当前的方法可行,但更常见的是使用一个包罗万象的规则和一个通用的处理脚本来进行路由。

RewriteRule ^(.*)$ handler.php?path=$1 [L]

然后handler.php可以决定如何处理blogportfolio-single/xnon-existing-page

现在可以使用PHP实现路由器,从而为您提供更大的自由度,例如基于多个正则表达式动态添加路由和匹配项。

这种方法的另一个优点是您的应用程序现在具有单个入口点。 由于只有一条路径,因此引导过程变得更加容易。

要添加.php扩展名,您必须检查是否存在相应的.php文件:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [NC,L]

RewriteRule ^portfolio-single/([^/.]+)/?$ portfolio-single.php?id=$1 [L,NC,QSA]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM