RewriteEngine On
RewriteCond %{HTTP_HOST} !.com$ //redirect from .net and .org to .com
RewriteRule .* http://www.domain.com%{REQUEST_URI} [R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC] //Always use www.
RewriteRule ^/(.*)$ http://www.%1/$1 [R=301]
RewriteRule ^/?article-(.*)$ article.php?id=$1 [L,QSA,NC] // redirect article-x to article.php?id=x
RewriteRule ^/?page-(.*)$ page?p=$1 [L,QSA,NC]// redirect page-x to page.php?p=x
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L] // add the .php to every request if the file type is missing
除了添加www之外,所有规则都可以正常工作。网址。例如http://domain.com/page-1不会重定向到http://www.domain.com/page-1
%1
指的是()
前面捕获的模式RewriteCond
。您尚未在中捕获任何模式RewriteCond
。相反,您可以只%{HTTP_HOST}
在中使用RewriteRule
。
如果这些规则驻留在.htaccess中,RewriteRule
将不包含前导/
,因此如果您的模式匹配,则将永远不匹配。删除/
并匹配^(.*)$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
旁注:不要忘记逃脱.
in .com
。它可以在不转义的情况下工作,但是该表达式并不表示您真正想要的含义。
RewriteCond %{HTTP_HOST} !\.com$
全部重写的整体外观应如下所示(我已经删除了所有的前导/
和/?
表达式)。我已经在自己的系统上进行了所有测试。
RewriteEngine On
RewriteCond %{HTTP_HOST} !\.com$ [NC]
#Use a capture group here, add [L]
RewriteRule (.*) http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteRule ^article-(.*)$ article.php?id=$1 [L,QSA,NC]
RewriteRule ^page-(.*)$ page?p=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句