Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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
如何使用PHP/Apache实现301重定向?_Php_Apache_Http Status Code 301 - Fatal编程技术网

如何使用PHP/Apache实现301重定向?

如何使用PHP/Apache实现301重定向?,php,apache,http-status-code-301,Php,Apache,Http Status Code 301,当用户通过www.domain.name进行访问时,在Apache中重定向到domain.name,您可以在配置文件中添加重定向行。在php中,回复时使用状态代码301和位置:header RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.domain\.name$ [NC] RewriteRule (.*) http://domain.name/$1 [R=301,QSA,L] 但是,重定向需要额外的网络往返。您确定不想只使用ServerAlia

当用户通过
www.domain.name
进行访问时,在Apache中重定向到
domain.name

,您可以在配置文件中添加重定向行。在php中,回复时使用状态代码301和位置:header

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

但是,重定向需要额外的网络往返。您确定不想只使用ServerAlias行,以便无论他们是否使用www访问,都能提供相同的内容吗?

将其放入网站根目录中的
.htaccess
文件中:

RewriteEngine On
RewriteCond %{HTTP_HOST} . 
RewriteCond %{HTTP_HOST} !^domain\.name 
RewriteRule (.*) http://domain.name/$1 [R=301,L,QSA]
这就是他们所做的,为了:

  • 打开重写引擎
  • 确保提供了
    HTTP\u主机
  • 如果它不是以没有
    www
    或任何其他子域的名称开头,则允许重写继续。这可以防止无休止地重定向回自身
  • 抓取URL
    (.*)
    之后的所有内容,包括查询字符串
    QSA
    ,并将
    R=301
    重定向到正确的域。如果找到匹配项,则
    L
    只表示这是文件中的最后一个命令

  • 这需要修改。仅使用重定向(或RedirectMatch)可以使用更常用的启用mod_alias.Is
    %{HTTP_HOST}来完成无用?不,我相信它允许您通过IP地址访问站点,而无需重定向。我刚刚测试过,当您通过IP访问时,HTTP\U主机将是IP。因此
    %{HTTP\U主机}。
    确实是无用的。