1

Hoping someone can help me with this issue...

I have a RewriteRule set up in my htaccess file that looks like this

RewriteRule ^/?find/(.+)/?in/(.+)/(.+)/ /page.html?&type=$1&city=$2&state_abbrev=$3 [L,QSA]

The rewrite works fine if I have a URL that contains all the parameters specified for example: http://www.site.com/find/doctors/in/dallas/tx/

The issue is, I would like to have this rewrite work even if one of the parameters is missing. For example, if I only entered http://www.site.com/find/doctors/ I would still want it to redirect to 'page.html' and just not have the parameters completed. So in that case it would be writing to http://www.site.com/page.html?type=doctors&city=&state_abbrev=. Currently, if I type in a URL that doesn't have all parameters in it the RewriteRule will not work. Any ideas how to fix this issue?

Thanks in advance...

4

2 回答 2

1

There is nothing stopping you from having multiple rewrites. I have many in my .htaccess for different things and many times you have to. Not one rewrite will work for all occasions.

You could try this.

RewriteEngine on
RewriteRule ^find/(.*)/in/(.*)/(.*) page.html?type=$1&city=$2&state_abbrev=$3&%{QUERY_STRING} [L]
RewriteRule ^find/(.*) page.html?type=$1&%{QUERY_STRING} [L]

It will first look for the full URL

http://www.site.com/find/doctors/in/dallas/tx

Then forward it to the first Rewrite rule.

But then if you used this

http://www.site.com/find/doctors

It will skip the first rule and it will match the 2nd rule redirecting to just the partial query string.

Hope that helps but you can make as many rules or conditions you want. And the order in which they come does matter.

于 2013-07-09T17:01:24.590 回答
1

Replace your rule with this:

RewriteRule ^/?find/([^/]+)(?:/in/?([^/]*)/?([^/]*)/?)? /page.html?type=$1&city=$2&state_abbrev=$3 [L,QSA]
于 2013-07-09T17:23:13.297 回答