2011-09-28 22 views
0

我无法围绕URL重写包装头。我想要做的事情似乎很简单,但我在获得我想要的结果时遇到了问题。创建一个简单的规则来重写一个友好的URL到物理URL

我想让用户输入www.mysite.com/search/real并在最后加上一个可选的/。这将他们带到www.mysite.com/content/search_real_property.asp

就是这样。这是我现在的规则。问题在于它会保持堆叠。

RewriteRule ^(search) content/search_real_property.asp

所以这会工作/search/real但这样会search/real/search/real/search/real/ 等。

+0

你真的尝试过,发现它会导致无限循环?如果是这样,还有其他事情正在发生 - 规则本身不是递归的。 –

+0

它可能不是递归的,但它并没有终止,所以你可以在“真实”之后放置任何东西,它会重定向。 – CD001

回答

1

假设没有其他问题,您已经打开了重写引擎(RewriteEngine On),并且您要么在httpd-vhosts.conf中添加重写,要么在Web树的根目录中添加.htaccess文件(以便解决任何路径问题)...那么问题仅仅是正则表达式模式匹配之一。尽管我对ASP似乎是一个Apache服务器运行感到困惑(假设我们正在谈论这个重写模式)。

所以,你真正想要的是终止比赛 - 是这样的:?

RewriteEngine On 
RewriteRule ^search/real/?$ /content/search_real_property.asp 

这将其固定/搜索/实(带或不带后缀斜线,则表示匹配前面的字符0或1次)到/content/search_real_property.asp。由于$符号表示行结束符(EOL有效),所以“真实”之后一定没有任何内容(除了可能是1个正斜杠)。

对于你可能想看看你其实可以使用正则表达式做,例如更大的灵活性...

RewriteEngine On 
RewriteRule ^search/([^/]*)/?$ /content/search_real_property.asp?query=$1 

这将允许你采取任何字符串,并将它传递的地址栏中显示为一个名为query的变量(Request.QueryString('query')IIRC)。

尝试:http://www.regular-expressions.info/了解更多信息。