Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
.htaccess 通过htaccess强制www.访问除某些目录外的所有URL_.htaccess - Fatal编程技术网

.htaccess 通过htaccess强制www.访问除某些目录外的所有URL

.htaccess 通过htaccess强制www.访问除某些目录外的所有URL,.htaccess,.htaccess,在我的htaccess中,我使用此代码将所有非www请求重定向到www,但一个目录除外,在该目录中,www被剥离,如果强制,则使用httpS RewriteCond $1 !^example1 RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] RewriteCond %{HTTPS} =off [NC] RewriteCond %{REQ

在我的htaccess中,我使用此代码将所有非www请求重定向到www,但一个目录除外,在该目录中,www被剥离,如果强制,则使用httpS

RewriteCond $1 !^example1
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/example1/(.*) [NC]
RewriteRule ^(.*)$ https://example.com/example1/%1 [R=301,L]
我的问题是当我想添加更多的异常时,比如示例2。我该怎么做


另外,如果异常目录比www.example.com/dir/example3低一级,我该怎么办?

那么,有两种选择:

您必须指定正则表达式而不是文本字符串,并且正则表达式必须匹配所有异常

您可以使用重写映射。我建议你看一下文档

使用正则表达式:

# some expections
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/(example[0-9]+.*)$ [NC]
RewriteRule ^(.*)$ https://example.com/%1 [R=301,L]

# the default rule: => add "www."
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
我扭转了局面,在开始时有异常,在结束时有一个“全面”默认值。显然,您可以通过将第一行加倍来添加更多异常。或者通过改变正则表达式。请注意,显然,所需正则表达式的详细信息取决于所收集的异常。只有你知道。。。我建议你读这本优秀的书

除了更复杂的正则表达式,您还可以在条件块中使用逻辑运算符:

# some expections
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/(example1.*)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/(example2.*)$ [NC]
RewriteRule ^(.*)$ https://example.com/%1 [R=301,L]

# the default rule: => add "www."
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
在谈到重写时,有两件重要的事情不能经常重复:

阅读手册!它非常优秀,有精确的描述和很好的例子

如果您有权访问主服务器配置,请使用“重写调试”: 重写模块为此定义了两个命令RewriteLog和RewriteLogLevel。配置一些日志文件,级别可能为7。然后发出一个请求,并使用tail-f/path/to/logfile监视日志文件中的新条目。这有助于理解重写引擎内部发生了什么,以及意外事件在哪里开始发生


确保当前配置按预期工作?我要说的是,这个异常并没有被捕获。是的,它是有效的。如果我尝试example.com,它会重定向到http://www.example.com。example.com/example1重定向到啊,好的,刚才看到了第一行。。。但这个解决方案有点笨拙,不可扩展……这对我来说似乎有点复杂,我的问题中的例子是我从这个网站上的其他问题中剪切和粘贴的。如果可能的话,请给我举个例子。好的,我添加了一些基本的例子。您必须自己做一点实验,因为只有您有自己的设置,并且知道要实现什么。但这些例子应该能让你对其背后的逻辑有所了解。