简单的mod_rewrite问题

时间:2009-06-25 07:50:46

标签: mod-rewrite

我是新手使用mod_rewrite并尝试在我的网站的基础级别重写页面:

www.site.com

我想重写以下任何网址www.site.com/main www.site.com/settings www.site.com/username

要访问:www.site.com/index.php?v = main www.site.com/index.php?v=settings www.site.com/index.php?v=username

当我在www.site.com/directory/下设置mod_rewrite但是无法弄清楚如何使其与www.site.com一起工作时,我有这个工作

RewriteEngine On
RewriteRule ^/([^/\.]+)/?$ index.php?v=$1 [L]

3 个答案:

答案 0 :(得分:1)

正确的规则是......

RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA]

但是你可能会遇到一些问题 - 例如,如果你有REAL目录 - 这也会重写它们并阻止你使用它们。您有两种方法可以避免此问题,您可以编写许多规则,例如:

RewriteRule ^Directory/?$ index.php?v=directory [L,NC,QSA]

或者您可以使用像这样的“假装目录”......

RewriteRule ^Content/([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA]

在第二个示例中,您的网址为www.site.com/Content/Directory /

我已将NC和QSA放在我的属性上 - 无案例和查询字符串追加。你绝对应该使用NC,而QSA在某些实现中很有用。

答案 1 :(得分:1)

我会决定路径是/settings还是/settings/(你目前是否匹配)等等(个人而言,我更喜欢/settings。)我相信这是好的想要使路径尽可能不具有暧昧。如果您要匹配/settings之类的路径,您可以这样做:

RewriteEngine On
RewriteRule ^(\w+)$ index.php?v=$1 [L]

如果您想支持其他查询参数,请查看QSA标记(例如:/settings?tab=passwordindex.php?v=settings&tab=password。)我提到它是因为这是困扰的事情我在一开始。

答案 2 :(得分:0)

你有一个额外的“/”。那应该是:

RewriteEngine On
RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L]