Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.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 在哪里可以获得建议的htaccess turorials_Apache_.htaccess - Fatal编程技术网

Apache 在哪里可以获得建议的htaccess turorials

Apache 在哪里可以获得建议的htaccess turorials,apache,.htaccess,Apache,.htaccess,无论我在网上看到什么地方,htaccess教程都非常基本。没有人能解释什么 RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC] RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L] [NC]和[R=301,L]的意思是(我可以计算出301的重读) 还有,%{HTTP\u HOST}令牌是从哪里来的?其他的是什么?什么时候捕获了$1 有没有教程可以解释这一切 编辑:这是我的mguymon htaccess

无论我在网上看到什么地方,htaccess教程都非常基本。没有人能解释什么

RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC]
RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]
[NC]
[R=301,L]
的意思是(我可以计算出301的重读)

还有,
%{HTTP\u HOST}
令牌是从哪里来的?其他的是什么?什么时候捕获了
$1

有没有教程可以解释这一切

编辑:这是我的mguymon htaccess文件:

Options -Indexes
ErrorDocument 404 /404.php
CheckSpelling on

RewriteEngine On
RewriteBase /  
###### Check for alias module to be installed ######

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

###### End www rewrite section ######

# Remove multiple slashes anywhere in URL
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

# Remove multiple slashes after domain
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L]

# show mysite.com/index.php always as mysite.com/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://mysite.com/ [R=301,L]
这将把
www.mysite.com/index.php/////index.php
更改为
mysite.com
,这是三条规则,每个规则中都有
[L]
开关

请查看。它解释了
[]
括号中的所有选项的含义

  • [NC]
    不区分大小写(或不区分大小写)
  • [R=301]
    是301(永久)重定向
  • [L]
    表示最后一条规则或停止重写
%{HTTP_HOST}
是一个表示主机的基本URL的名称,例如
www.example.com

如果您了解正则表达式,还应该了解分组
(.*)
匹配路径(整个路径)的开始
^
和结束
$
之间的所有字符,然后在第二部分中可以将其用作
$1

Apache.htaccess文件使用标准Apache配置,比如。这些文档解释了RewriteCond和RewriteRule是如何操作的

我将分解您的ModRewrite问题:

RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC]
  • 是确定是否应进行重写的条件
  • %{HTTP_HOST}
    表示RewriteCond正在检查请求的主机名
  • ^www.mysite.com$
    是模式,检查主机名是否与www.mysite.com匹配
  • [NC]
    表示无大小写,使模式匹配不区分大小写
例如,如果有人请求,
RewriteCond
将根据模式
^www.mysite.com$
检查主机www.mysite.com,并且由于它匹配,将执行以下RewriteRule

RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]
  • 是重写请求的有力工具
  • ^(.*)$
    是模式,它将匹配所有内容。如果模式不匹配,将不执行重写规则
  • http://mysite.com/$1是重写,基本上将请求从
    www.
    mysite.com更改为mysite.com
  • [R=301,L]
    意味着重写应该发送301重定向,并且是最后运行的重写规则
继续通过RewriteCond的示例,/index.html将匹配
^(.*)$
模式,重写将被设置为并作为301重定向发送,并且不会发生进一步的
RewriteRules


编辑:思考配置

根据我的经验,您希望所有重定向都位于配置的顶部。特别是在你的事业中,如果你试图规范你的URL,请求将通过一系列重定向被清除。完成后,您将进行重写以提供正确的内容。考虑到这一点,下面是最后2条规则的调整配置:

   # show mysite.com/index.php always as mysite.com/
   RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
   RewriteRule ^index\.php$ http://mysite.com/ [R=301,QSA,L]

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^/(.*)$ /index.php?a_param=$1 [QSA]   
在我脑子里,我无法验证
RewriteCond%{the_REQUEST}
,但它看起来不错。我怀疑您想要的标志是查询字符串append。这将导致http://mysite.com/index.php?user=blah 重定向到http://mysite.com/?user=blah. 如果需要通过重定向传递查询字符串,则需要将QSA添加到其他重定向

最后一条规则是确定是否应该使用index.php,而不是htaccess目录中的静态内容(目录、图像、js等)。您不希望将其作为重定向,而是作为重写。不要使用[R]或[L],而是再次添加[QSA]。匹配的模式应设置为传递给index.php的特定参数


这与之前的规则相结合将导致http://mysite.com/index.php?user=blah 重定向到http://mysite.com/?user=blah 然后将其重写,以便使用index.php。请求将被重写,因此index.php用于教程而不是参考。我见过很多htaccess文件都有不止一条重写规则,它们都有
[L]
这难道不意味着第一条规则不能运行吗?正确,这意味着只有一条重写规则可以运行。一般来说,这是为了防止规则重叠。RewriteRule模式将确定规则是否运行,因此根据请求,第一个RewriteRule不会每次运行。My htaccess一次应用多个规则tho,并且它们都具有
[L]
开关。如果需要同时应用多个规则,则它们不能具有[L]。如果您发布有问题的规则以及您试图实现的目标,我可以查看它们,看看是否可以提供帮助。请参见我的编辑,
[L]
标志不会阻止它应用更多规则。