Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
.htaccess 重写查询字符串中的URL空值-双斜杠,可选参数_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

.htaccess 重写查询字符串中的URL空值-双斜杠,可选参数

.htaccess 重写查询字符串中的URL空值-双斜杠,可选参数,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我已经环顾了很多地方,试了试,但还是没办法解决 这是应用“重写”之前的URL: http://example.com/job-search/?searchText=GOOGLE+INC.&searchCity=Enter+US+City+or+Zipcode&searchYear=14&action=search&searchJobTitle=Enter+Job+Title+%2F+Role+Name 这是应用以下重写规则后的URL: http://exampl

我已经环顾了很多地方,试了试,但还是没办法解决

这是应用“重写”之前的URL:

http://example.com/job-search/?searchText=GOOGLE+INC.&searchCity=Enter+US+City+or+Zipcode&searchYear=14&action=search&searchJobTitle=Enter+Job+Title+%2F+Role+Name
这是应用以下重写规则后的URL:

http://example.com/job-search/GOOGLE-INC./Enter-US-City-or-Zipcode/14/search/Enter-Job-Title 
我在.htaccess中有以下规则。当我有上面的URL和所有字段时,它工作得很好

RewriteEngine On
RewriteBase /job-search/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)(?:\+|%20|\s)+(.+?)\sHTTP [NC] 
RewriteRule ^ /%1-%2 [L,NE,R]

RewriteCond %{THE_REQUEST} \?searchText=([^\s&]+)&searchCity=([^\s&]+)&searchYear=(\d+)&action=([^\s&]+)&searchJobTitle=([^\s&]+) [NC]
RewriteRule ^ %1/%2/%3/%4/%5? [R=302,L,NE]

RewriteRule ^([^/]+)/([^/]+)/(\d+)/([^/]+)/([^/]+)/?$ ?searchText=$1&searchCity=$2&searchYear=$3&action=$4&searchJobTitle=$5 [NC,L,QSA]
当得到空值时,重写失败。规则不起作用,我得到下面的URL

http://example.com/job-search/?searchText=GOOGLE-INC.&searchCity=&searchYear=14&action=search&searchJobTitle=
在三个参数(searchText、searchCity或SearchJobTitle)中,一次只有一个参数有值,另外两个参数有空值。另外,我只是想确保,当用户像这样键入主页URL时,它不应该失败(我尝试了一些东西,但失败了)。也要避免双斜杠,当它们为空时

下面是我希望看到的输出:

例如,当searchCity和SearchJobTitle为空时,输出URL应如下所示

http://example.com/job-search/GOOGLE-INC./14/search
http://example.com/job-search/14/search/Application-Engineer
当searchText和searchCity为空且searchJobTitle值为“Applicaton Engineer”时,输出URL应如下所示

http://example.com/job-search/GOOGLE-INC./14/search
http://example.com/job-search/14/search/Application-Engineer

你能帮我找到正确的规则吗?谢谢你的帮助

将规则更改为:

RewriteEngine On
RewriteBase /job-search/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)(?:\+|%20|\s)+(.+?)\sHTTP [NC] 
RewriteRule ^ /%1-%2 [L,NE,R]

RewriteCond %{THE_REQUEST} \?searchText=([^\s&]+)&searchCity=&searchYear=(\d+)&action=([^\s&]+)&searchJobTitle=\s [NC]
RewriteRule ^ %1/%2/%3/? [R=302,L,NE]

RewriteCond %{THE_REQUEST} \?searchText=([^\s&]+)&searchCity=([^\s&]+)&searchYear=(\d+)&action=([^\s&]+)&searchJobTitle=([^\s&]+) [NC]
RewriteRule ^ %1/%2/%3/%4/%5? [R=302,L,NE]

RewriteRule ^([^/]+)/([^/]+)/(\d+)/([^/]+)/([^/]+)/?$ ?searchText=$1&searchCity=$2&searchYear=$3&action=$4&searchJobTitle=$5 [NC,L,QSA]

RewriteRule ^([^/]+)/(\d+)/([^/]+)/?$ ?searchText=$1&searchYear=$2&action=$3 [NC,L,QSA]

如果参数可以是可选的,您可能应该重新考虑这些URL的外观,并考虑其中的一些参数可以是可选的blank@JonLin目前,我正在PHP中检查它们是否为空,并执行相应的操作。我已经添加了URL结构,如果它们为空以便澄清。不,我指的是URL,如:
/A/B/C/D/E/F
,如果其中任何一个是可选的,它将看起来像:
/A/B/D/F
,那么您应该如何判断哪个应该是“C”还是“E”?或者它们实际上是空的?@JonLin,说得好,我在想,当我提交表单时,请求对象会提到它分配给哪个值,哪个值是空的,所以当我读取这些值时,它将是空的。我明白你的意思,当有人直接用URL访问而不是提交表单时。我在想。有什么建议吗?谢谢@anubhava,它适用于场景一,当搜索文本不为空而其他文本为空时。但当searchCity不是空的,其他两个都是空的时,它就失败了。我得到这个网址,你不应该合并在同一个问题多个问题。我已经为您提供了如何处理空白值的答案。试着自己为其他组合建立一个规则,如果你面临问题,请打开一个新问题。理解,谢谢!我们将努力建设。