.htaccess 重写查询字符串中的URL空值-双斜杠,可选参数
我已经环顾了很多地方,试了试,但还是没办法解决 这是应用“重写”之前的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
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不是空的,其他两个都是空的时,它就失败了。我得到这个网址,你不应该合并在同一个问题多个问题。我已经为您提供了如何处理空白值的答案。试着自己为其他组合建立一个规则,如果你面临问题,请打开一个新问题。理解,谢谢!我们将努力建设。