Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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 如何在mod rewrite中允许空变量_Php_Variables_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 如何在mod rewrite中允许空变量

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

我的htaccess中有以下内容:

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]

谢谢,我试过了,但搜索//类别名称或搜索/类别名称都不起作用