Apache 在哪里可以获得建议的htaccess turorials
无论我在网上看到什么地方,htaccess教程都非常基本。没有人能解释什么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
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]
是301(永久)重定向[R=301]
表示最后一条规则或停止重写[L]
%{HTTP_HOST}
是一个表示主机的基本URL的名称,例如www.example.com
如果您了解正则表达式,还应该了解分组(.*)
匹配路径(整个路径)的开始^
和结束$
之间的所有字符,然后在第二部分中可以将其用作$1
Apache.htaccess文件使用标准Apache配置,比如。这些文档解释了RewriteCond和RewriteRule是如何操作的
我将分解您的ModRewrite问题:
RewriteCond %{HTTP_HOST} ^www\.mysite\.com$ [NC]
- 是确定是否应进行重写的条件
表示RewriteCond正在检查请求的主机名%{HTTP_HOST}
是模式,检查主机名是否与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是重写,基本上将请求从
mysite.com更改为mysite.comwww.
意味着重写应该发送301重定向,并且是最后运行的重写规则李>[R=301,L]
^(.*)$
模式,重写将被设置为并作为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]
标志不会阻止它应用更多规则。