[英]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
可以决定如何处理blog
和portfolio-single/x
和non-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.