我正在尝试为我的php搜索页面创建一些不错的网址。
我目前的代码:
RewriteRule ^/search-jobs/?$ search-jobs.php [NC,L] # Search jobs page
RewriteRule ^/search-jobs/jobs-in-(.*)/?$ search-results.php?location=$1 [NC,L] # Search results locations page
匹配/ search-jobs与search-jobs.php,太棒了 但它也匹配/ search-jobs / jobs-in-london到search-jobs.php,但我希望它匹配search-results.php的第二条规则
为什么总是使用第一条规则?以及如何解决它?
修改
目前的答案都没有奏效。我认为我的问题是我托管上的某个地方(我无法访问)有一些默认设置,好像我只是去/搜索结果,它会自动使用search-results.php文件,虽然我没有说明任何事情它这样做?
所以,理论上,任何/ search-jobs(.*)查询都会自动使用search-jobs.php,看起来不管我创建的任何规则。
无论如何,我将我的规则重新安排到下面..我仍然总是点击search-jobs.php文件:
RewriteEngine On # Turn on the rewriting engine
RewriteRule ^/search-jobs/jobs-in-(.*)/?$ search-results.php?location=$1 [NC,L] # Search results locations page
RewriteRule ^/search-jobs/(.*)-jobs/?$ search-results.php?keywords=$1 [NC,L] # Search results keywords page
RewriteRule ^/search-jobs/?$ search-jobs.php [NC,L] # Search jobs page
答案 0 :(得分:1)
从请求字符串的开头删除斜杠/
,如下所示:
RewriteRule ^search-jobs/jobs-in-(.*)/?$ search-results.php?location=$1 [NC,L] # Search results locations page
RewriteRule ^search-jobs/(.*)-jobs/?$ search-results.php?keywords=$1 [NC,L] # Search results keywords page
RewriteRule ^search-jobs/?$ search-jobs.php [NC,L] # Search jobs page
答案 1 :(得分:0)
首先放置第二条规则,并将正则表达式括在引号中。
当它匹配^ / search-jobs / jobs-in(。*)/?$时,[L]标志表示不继续,所以它不会处理^ / search-jobs /?$