Php 如何在mod rewrite中允许空变量
我的htaccess中有以下内容:Php 如何在mod rewrite中允许空变量,php,variables,mod-rewrite,url-rewriting,Php,Variables,Mod Rewrite,Url Rewriting,我的htaccess中有以下内容: RewriteRule ^search/([^/]*)/?$ search.php?search=$1 [NC,L,QSA] RewriteRule ^search/([^/]*)/([^/]+)/?$ search.php?search=$1&cat=$2 [NC,L,QSA] 如果定义了搜索,则该选项可以正常工作 有时搜索变量可以保留为空或“”以搜索整个类别 这是如何与mod rewrite一起工作的 定义搜索时,它将是: search/sea
RewriteRule ^search/([^/]*)/?$ search.php?search=$1 [NC,L,QSA]
RewriteRule ^search/([^/]*)/([^/]+)/?$ search.php?search=$1&cat=$2 [NC,L,QSA]
如果定义了搜索,则该选项可以正常工作
有时搜索变量可以保留为空或“”以搜索整个类别
这是如何与mod rewrite一起工作的
定义搜索时,它将是:
search/search-variable/category-name
如果搜索保留为空或“”,mod rewrite会这样显示吗
search//category-name
或者像这样一起跳过变量:
search/category-name
你有错误的正则表达式。此
[^/]+
表示至少一个字符。
您应该将表达式更改为[^/]*
如何区分
搜索/类别名称
和搜索/搜索术语
?通过对什么是类别和什么是搜索词有一个概念,或者通过查询搜索词是否作为类别存在。Mod_rewrite无法做到这一点。它只匹配一个模式,因为您有两个相同的模式用于两个不同的东西,所以您必须在搜索文件中区分它们
除此之外,像example.com/search//something
这样的url在内部可能由example.com/search/something
表示,因为它仍然是指向资源的路径,而不是任意字符串
RewriteRule ^search/([^/]*)/?$ search.php?search=$1 [L,QSA]
RewriteRule ^search/([^/]*)/([^/]*)/?$ search.php?search=$1&cat=$2 [L,QSA]
在search.php中,检查$\u GET['search']
是否是一个类别或搜索词
或者将您的URL更改为如下内容:search/search term/category/category name
和search/category/category name
。然后可以确定每个路径段中的内容:
RewriteRule ^search/([^/]+)/category/([^/]+)/?$ search.php?search=$1&cat=$2 [L,QSA]
RewriteRule ^search/category/([^/]+)/?$ search.php?cat=$1 [L,QSA]
谢谢,我试过了,但搜索//类别名称或搜索/类别名称都不起作用