我对这个mod_rewrite的东西很新,我正在尝试从新的应用程序中清理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)中,我总是检查$ page是否设置为显示内容。 如何将我的网址发送给客户:
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 :(得分:0)
这有助于你知道你得到了什么奇怪的结果。话虽如此,你应该为你的重写网址定义基础。在第一次重写指令之前添加RewriteBase /。
答案 1 :(得分:0)
表达式.*
非常宽泛,也可以包含正斜杠,因此为了避免出现意外情况,我会根据您的情况缩小范围:
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)(?:/([\d]+)/?)?$ /dreams.php?page=$1&p=$2
那只会改写:
请注意,在表达式中,您需要至少有3个正斜杠才能匹配。
答案 2 :(得分:0)
尝试将RewriteRule更改为:
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=