Dav*_*idW 2 mod-rewrite url-rewriting
我正在使用以下大量指令将www重写为非www url:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
如果我把它放在.htaccess文件中,它工作正常.
如果我将它放在vhost文件中,在重写两个正斜杠后会添加到主机,例如www.domain.com将成为domain.com//
我错过了什么吗?
另外,是否值得在vhost中以性能方式放置所有.htaccess内容?
RewriteRule 表现得像文档说的那样.
RewriteRule在VirtualHost上下文和Directory & .htaccess上下文中匹配的内容有所不同.
匹配的是什么?
在VirtualHost上下文中,模式最初将匹配主机名和端口之后以及查询字符串之前的URL部分(例如"/app1/index.html").
在Directory和htaccess上下文中,在删除引导服务器到当前RewriteRule的前缀(例如"app1/index.html"或"index.html",具体取决于指令的位置)之后,Pattern最初将与文件系统路径匹配.定义).
如果要匹配主机名,端口或查询字符串,请分别使用带有%{HTTP_HOST},%{SERVER_PORT}或%{QUERY_STRING}变量的RewriteCond.
因此,当VirtualHost服务器不在directory上下文中时,/不会删除前缀.还记得匹配时RewriteRule的VirtualHost情况下,该模式将总是开始/.
所以,你的RewriteRule应该是:
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,NC,L]
Run Code Online (Sandbox Code Playgroud)
在VirtualHost上下文中.
另外,是否值得在vhost中以性能方式放置所有.htaccess内容?
当然是.一个原因是,.htaccess每次访问页面时都不会读取文件().
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |