2011-11-28 83 views
0

我在这个mod_rewrite的东西上真的很新,我试图从一个新的应用程序中清理url。使用动态URL在apache中进行URL重写

我在网站中有2种类型的URL。他们总是下面的格式之一:

http://www.site.com/dreams.php?page=view&p=23 
http://www.site.com/dreams.php?page=view&p=20 
http://www.site.com/dreams.php?page=contact 
http://www.site.com/dreams.php?page=contests 

现在在我的主网页(dreams.php)我经常检查,看看是否$页面设置要显示的内容。 我如何客户端我的网址有:

http://www.site.com/view/23 
http://www.site.com/view/20 
http://www.site.com/contact 
http://www.site.com/contests 

有一个例外,这些页面是当供应商页面上的内容的用户搜索。

http://www.site.com/dreams.php?page=vendor_profile&pg=2&cat=&q=c&v_search= 

我开始玩这个,但我得到了一些非常奇怪的结果。

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule /(.*)/(.*)/$ /dreams.php?page=$1&p=$2 

非常感谢。

回答

0

表达.*非常广泛,可以由正斜杠的为好,这样可避免意外情况,我会缩小它,你的情况:

RewriteEngine On 
RewriteBase/
RewriteRule ^([a-z]+)(?:/([\d]+)/?)?$ /dreams.php?page=$1&p=$2 

这只会改写:

  1. 仅含有小写字符的地址(A - Z)
  2. 一个地址开始,只有小写字符,任选随后用正斜杠和一个号码和可选的前进SLA最后。

请注意,在您的表达式中,您至少需要3个正斜杠来匹配。

+0

感谢。这很有效。我不得不改变我的css文件的相对路径等等。我虽然mod-rewrite的实现不会对实际页面的内容产生任何影响。这只是进入页面的另一种方式。页面已经打开,但很多资产都没有。 – Bruno

+0

@布鲁诺是的,当你使用url的时候,相对路径往往会停止工作:-) – jeroen

0

它会有帮助tomknow你会得到什么奇怪的结果。刚才说过,你应该为你的重写URL定义基础。在您的第一个重写指令之前添加RewriteBase /。

0

试着改变你的重写规则,以这样的:

RewriteRule /([^/]+)/?$ /dreams.php?page=$1 [L,QSA] 
RewriteRule /([^/]+)/([^/]+)/?$ /dreams.php?page=$1&p=$2 [L,QSA] 

这样,查询字符串获得附加所以像这样的链接将工作:http://www.site.com/vendor_profile?pg=2&cat=&q=c&v_search=