我正在设置的网站上设置加载http://domain.tld?p=pagename
页面,我希望http://domain.tld/pagename
可以访问这些网页(仅仅是因为它更短,更容易引导人们去。)
我理解这可以通过mod_rewrite
中的.htaccess
来完成,但在涉及服务器内容时,我有点不高兴。这是可取的吗?如果是的话,它是如何完成的?
(哦,主页上没有查询字符串,它只是http://domain.tld
- 我不希望这样打破它。)
答案 0 :(得分:1)
自从我玩apache configs以来已经有一段时间,但你想要这样的事情:
RewriteEngine on
RewriteRule ^/([^/])/? ?p=$1
第一部分是正则表达式,第二部分是替换,就像你在perl的s/foo/bar/
结构中找到的那样(当然,与perl有一些区别,因为正则表达式的实现总是略有不同)。
这与http://domain.tld
或http://domain.tld/
不符,因为([^/])
不满意,而且不是可选的。正则表达式末尾的/?
同样处理http://domain.tld/pagename
和http://domain.tld/pagename/
(如果你想这样做)
请注意,如果在查询字符串上传递了其他参数,则上面的代码不一定有效,但您没有要求...
你应该知道,网页重写可能变得非常复杂,因为页面开始有额外的查询字符串参数,或者你想要/area/pagename
等。这增加的复杂性最终会导致你花费大量时间阅读本页:
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
也许这是值得的......只有你知道问题的答案:)