Mod rewrite 简单的mod_重写问题
我不熟悉使用mod_rewrite,正在尝试在我的网站的基本级别上重写页面: www.site.comMod rewrite 简单的mod_重写问题,mod-rewrite,Mod Rewrite,我不熟悉使用mod_rewrite,正在尝试在我的网站的基本级别上重写页面: www.site.com RewriteEngine On RewriteRule ^/([^/\.]+)/?$ index.php?v=$1 [L] 我想重写以下任何URL 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=s
RewriteEngine On
RewriteRule ^/([^/\.]+)/?$ index.php?v=$1 [L]
我想重写以下任何URL 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]
你有一个额外的“/”。这应该是:
RewriteEngine On
RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L]
正确的规则是
RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA]
但是你可能会遇到一些问题——例如,如果你有真实的目录——这也会重写它们并阻止你使用它们。您有两种选择来避免问题,您可以编写许多规则,如下所示:
RewriteRule ^Directory/?$ index.php?v=directory [L,NC,QSA]
RewriteEngine On
RewriteRule ^(\w+)$ index.php?v=$1 [L]
或者你可以用一个像这样的“假装目录”
RewriteRule ^Content/([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA]
在第二个示例中,您的URL是www.site.com/Content/Directory/
我在属性中添加了NC和QSA,没有大小写和查询字符串附加。你肯定应该使用NC,QSA在某些实现中很有用。我会决定路径应该是
/settings
还是/settings/
(目前两者都匹配)等等(我个人更喜欢/settings
),我认为让路径尽可能无歧义是个好主意。如果要匹配路径,如/settings
,则需要执行以下操作:
RewriteRule ^Directory/?$ index.php?v=directory [L,NC,QSA]
RewriteEngine On
RewriteRule ^(\w+)$ index.php?v=$1 [L]
如果您想支持其他查询参数(例如:
/settings?tab=password
toindex.php?v=settings&tab=password
),还可以查看QSA
标志我之所以提到这一点,是因为这是一开始让我感到困扰的事情。您不必在字符类声明中避开圆点。