将查询字符串重写为斜杠

时间:2013-02-28 23:47:29

标签: apache .htaccess mod-rewrite

我正在设置的网站上设置加载http://domain.tld?p=pagename页面,我希望http://domain.tld/pagename可以访问这些网页(仅仅是因为它更短,更容易引导人们去。)

我理解这可以通过mod_rewrite中的.htaccess来完成,但在涉及服务器内容时,我有点不高兴。这是可取的吗?如果是的话,它是如何完成的?

(哦,主页上没有查询字符串,它只是http://domain.tld - 我不希望这样打破它。)

1 个答案:

答案 0 :(得分:1)

自从我玩apache configs以来已经有一段时间,但你想要这样的事情:

RewriteEngine  on
RewriteRule    ^/([^/])/?  ?p=$1 

第一部分是正则表达式,第二部分是替换,就像你在perl的s/foo/bar/结构中找到的那样(当然,与perl有一些区别,因为正则表达式的实现总是略有不同)。

这与http://domain.tldhttp://domain.tld/不符,因为([^/])不满意,而且不是可选的。正则表达式末尾的/?同样处理http://domain.tld/pagenamehttp://domain.tld/pagename/(如果你想这样做)

请注意,如果在查询字符串上传递了其他参数,则上面的代码不一定有效,但您没有要求...

你应该知道,网页重写可能变得非常复杂,因为页面开始有额外的查询字符串参数,或者你想要/area/pagename等。这增加的复杂性最终会导致你花费大量时间阅读本页:

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

也许这是值得的......只有你知道问题的答案:)