Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
apache重写-删除www并保留路径_Apache_.htaccess_Rewrite - Fatal编程技术网

apache重写-删除www并保留路径

apache重写-删除www并保留路径,apache,.htaccess,rewrite,Apache,.htaccess,Rewrite,我的网站有两个URL: http://sub.domain.com/ 及 我想统一的网址,只使用没有www的版本。 但谷歌也有链接到www的版本,这些版本链接到一篇特定的文章(路径的URL)。例如: http://www.sub.domain.com/folder/some.html 我想重定向访问者,以便从地址中删除www前缀并保留文章的路径。使用上面的示例将URL重写为: http://sub.domain.com/folder/some.html 让我们澄清一下: 我想: http:

我的网站有两个URL:

http://sub.domain.com/

我想统一的网址,只使用没有www的版本。 但谷歌也有链接到www的版本,这些版本链接到一篇特定的文章(路径的URL)。例如:

http://www.sub.domain.com/folder/some.html
我想重定向访问者,以便从地址中删除www前缀并保留文章的路径。使用上面的示例将URL重写为:

http://sub.domain.com/folder/some.html
让我们澄清一下:

我想:

http://www.sub.domain.com -> http://sub.domain.com

在应用规则之后:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]
我得到:

http://www.sub.domain.com -> http://sub.domain.com
^^它工作正常:)

^^这是错误的:(


我的其他当前htaccess规则:

将其添加到web根目录中的
.htaccess

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

将其添加到web根目录中的
.htaccess

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

我通常建议使用请求URI,而不是常见的^(.*)和$1:

优点:

  • 请求URI正确地保留了缺少尾部斜杠的路径($1不这样做)。因此
    olddomain.com/path
    将完全重定向到
    newdomain/path
    。仅使用$1时
    olddomain.com/path/
    将重定向到
    newdomain/path/
    ,但缺少尾部斜杠的路径段将被删除
  • REQUEST_URI正确地保留了任何查询字符串,这将需要$1解决方案的附加QSA标志

我通常建议使用请求URI,而不是常见的^(.*)和$1:

优点:

  • 请求URI正确地保留了缺少尾部斜杠的路径($1不这样做)。因此
    olddomain.com/path
    将完全重定向到
    newdomain/path
    。仅使用$1时
    olddomain.com/path/
    将重定向到
    newdomain/path/
    ,但缺少尾部斜杠的路径段将被删除
  • REQUEST_URI正确地保留了任何查询字符串,这将需要$1解决方案的附加QSA标志

它不能像我期望的那样工作。如果你使用一个地址www.sub.domain.com,它会将我重定向到sub.domain.com,这没关系。但是如果我使用浏览器,它会将我重定向到主页,而不是。这意味着你在某个地方有一个冲突的规则,因为我的规则不匹配,除非你在域名中有
www.
,否则你可以执行任何操作。发布你的日志当前规则并检查您是否有多个htaccess文件。我的htaccess规则:我没有多个htaccess文件。禁用我的规则后(在它们之前添加
)你能访问
sub.domain.com/folder/some.html吗?如果没有,问题就出在别处。检查你是否有
/folder/.htaccess
,因为你的根
htaccess
也不会重定向。不过,它有一条规则说如果
/component/any page.php
(或html等)改为提供
index.php
。但是,即使这样也不会重定向,也就是说,你的浏览器url应该保持不变。是的,无论有没有规则,我都可以直接访问sub.domain.com/folder/some.html。这并不像我预期的那样工作。如果你使用地址www.sub.domain.com,它会将我重定向到sub.domain.com,这没关系。但是如果我使用browser将我重定向到主页,而不是。这意味着你在某个地方有一个冲突的规则,因为我的规则不匹配,除非你在域名中有
www.
。发布你的当前规则并检查你是否有多个htaccess文件。我的htaccess规则:我没有多个htaccess文件。禁用我的规则(在它们之前添加
#
)你能到达
sub.domain.com/folder/some.html吗?如果没有,问题就在别处。检查你是否有
/folder/.htaccess
,因为你的根
htaccess
也不会重定向。不过,它有一条规则说如果
/component/any page.php
(或html等)改为提供
index.php
。但是,即使这样也不会重定向,即您的浏览器url应该保持不变。是的,无论有无规则,我都可以直接访问sub.domain.com/folder/some.html。
http://www.sub.domain.com/folder/some.html -> http://sub.domain.com
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^ http://sub.domain.com%{REQUEST_URI} [R=301,L]