【发布时间】:2015-02-26 06:38:30
【问题描述】:
我环顾四周并尝试了自己,但无法解决。
这是申请重写前的网址:
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 时,如 http://example.com/job-search/ ,它不应该失败(我尝试了一些东西但它失败了)。当它们为空时,也希望避免使用双斜线。
下面是我想看到的输出:
例如,当 searchCity 和 SearchJobTitle 为空时,输出 URL 应如下所示
http://example.com/job-search/GOOGLE-INC./14/search
当 searchText 和 searchCity 为空且 searchJobTitle 值为 'Applicaton-Engineer' 时,输出 URL 应如下所示
http://example.com/job-search/14/search/Application-Engineer
你能帮我找到正确的规则吗?感谢你的帮助 !
【问题讨论】:
-
如果参数可以是可选的,您可能应该重新考虑您希望这些 URL 的外观,因为其中一些可能是空白的
-
@JonLin 目前,我正在检查 PHP,如果它们是空白或 null 并执行相应的操作。我已经添加了 URL 结构,如果它们是空白的以便澄清。
-
不,我的意思是 URL 如:
/A/B/C/D/E/F,如果其中任何一个是可选的,它看起来像:/A/B/D/F,那么你应该如何判断应该是哪个是“C”还是“E”?或者它们实际上是空白的? -
@JonLin,好点子,我在想,当我提交表单时,REQUEST 对象会提到它被分配给哪个值,哪个值是空白,所以当我读取这些值时,它会为空白。我明白你的意思,当有人直接使用 URL 访问而不是提交表单时。我在想。有什么建议吗?
标签: .htaccess mod-rewrite url-rewriting