Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mod rewrite 简单的mod_重写问题_Mod Rewrite - Fatal编程技术网

Mod rewrite 简单的mod_重写问题

Mod 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

我不熟悉使用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=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
to
index.php?v=settings&tab=password
),还可以查看
QSA
标志我之所以提到这一点,是因为这是一开始让我感到困扰的事情。

您不必在字符类声明中避开圆点。