mod_rewrite 参数问题
mod_rewrite issue with parameters
我有以下 .htaccess 文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]
RewriteRule ^portfolio-single/([^/.]+)/?$ portfolio-single.php?id= [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 扩展名结尾的页面都工作正常。因此,例如 www.somewebsite.com/blog.php
现在可以通过 /blog
访问。但是我想要某个页面,即 portfolio-single.php?id=123
可以通过 /portfolio-single/123
访问。在第 4 行,您可以看到我从 website 中获取的代码,我一直在尝试让它工作,但当我通过 /portfolio-single/123
访问 portfolio-single 时,一直收到 404。我错过了什么?后续问题是我是否必须重新启动 XAMPP 才能使对 .htaccess 文件的更改生效(到目前为止它没有工作)。
尝试交换这两个规则。最后一条规则更具体,所以它应该首先匹配。
虽然您当前的方法有效,但更常见的是使用一个包罗万象的规则和一个执行路由的通用句柄脚本。
RewriteRule ^(.*)$ handler.php?path= [L]
然后 handler.php
可以决定如何处理 blog
和 portfolio-single/x
以及 non-existing-page
。
路由器现在可以在 PHP 中实现,这给了你更多的自由,比如动态添加路由和基于多个正则表达式的匹配项。
此方法的另一个优点是您的应用程序现在具有单一入口点。这使得引导更加容易,因为只有一条路径。
要添加 .php
扩展名,您必须先检查相应的 .php
文件是否存在:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC]
RewriteRule ^(.+?)/?$ .php [NC,L]
RewriteRule ^portfolio-single/([^/.]+)/?$ portfolio-single.php?id= [L,NC,QSA]
我有以下 .htaccess 文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]
RewriteRule ^portfolio-single/([^/.]+)/?$ portfolio-single.php?id= [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 扩展名结尾的页面都工作正常。因此,例如 www.somewebsite.com/blog.php
现在可以通过 /blog
访问。但是我想要某个页面,即 portfolio-single.php?id=123
可以通过 /portfolio-single/123
访问。在第 4 行,您可以看到我从 website 中获取的代码,我一直在尝试让它工作,但当我通过 /portfolio-single/123
访问 portfolio-single 时,一直收到 404。我错过了什么?后续问题是我是否必须重新启动 XAMPP 才能使对 .htaccess 文件的更改生效(到目前为止它没有工作)。
尝试交换这两个规则。最后一条规则更具体,所以它应该首先匹配。
虽然您当前的方法有效,但更常见的是使用一个包罗万象的规则和一个执行路由的通用句柄脚本。
RewriteRule ^(.*)$ handler.php?path= [L]
然后 handler.php
可以决定如何处理 blog
和 portfolio-single/x
以及 non-existing-page
。
路由器现在可以在 PHP 中实现,这给了你更多的自由,比如动态添加路由和基于多个正则表达式的匹配项。
此方法的另一个优点是您的应用程序现在具有单一入口点。这使得引导更加容易,因为只有一条路径。
要添加 .php
扩展名,您必须先检查相应的 .php
文件是否存在:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC]
RewriteRule ^(.+?)/?$ .php [NC,L]
RewriteRule ^portfolio-single/([^/.]+)/?$ portfolio-single.php?id= [L,NC,QSA]