我正在一个设置为将页面加载为的网站上工作http://domain.tld?p=pagename
,并且我希望这些页面可以通过http://domain.tld/pagename
(仅仅是因为它更短且更容易引导人们访问)。
我知道这可以用mod_rewrite
in来完成.htaccess
,但是在服务器方面我有点不适应。这是可取的,如果是,它是如何完成的?
(哦,主页没有查询字符串,只是http://domain.tld
- 我不希望这破坏它。)
我正在一个设置为将页面加载为的网站上工作http://domain.tld?p=pagename
,并且我希望这些页面可以通过http://domain.tld/pagename
(仅仅是因为它更短且更容易引导人们访问)。
我知道这可以用mod_rewrite
in来完成.htaccess
,但是在服务器方面我有点不适应。这是可取的,如果是,它是如何完成的?
(哦,主页没有查询字符串,只是http://domain.tld
- 我不希望这破坏它。)
自从我玩 apache 配置以来已经有一段时间了,但你想要这样的东西:
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
等,URL 重写可能会变得非常复杂。这种增加的复杂性最终会导致您花费大量时间阅读此页面:
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
也许值得……只有你知道那个问题的答案g :)