.htaccess排除301重定向绕过伪静态例外文件夹目录规则

WordPress 网站在 Apache 中部署时使用 .htaccess 文件指定重写规则。

但是,有时当有其它程序时,比如:CWP自定义子域名文件夹目录路径编辑vhosts文件,需要排除301重定向例外文件夹目录,绕过WordPress的伪静态规则。

以下是一种可能的方法。

.htaccess 文件添加排除文件夹目录规则 

.htaccess文件排除301重定向例外文件夹目录规则

如果有将不带www顶级域名自动跳转访问二级域名,需要在 .htaccess 文件添加重定向排除文件夹目录规则 ▼

RewriteCond %{REQUEST_URI} !^/img.chenweiliang.com/.*$ [NC]

将此代码放在第一条规则之前,即可实现指定目录排除功能 ▼

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/img.chenweiliang.com/.*$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
  • 设置生效后,访问文件夹目录 /img.chenweiliang.com/ 之内的页面,不会被 WordPress 处理。

二级目录 /go/ 无法重定向问题

陈沩亮博客使用WordPress插件GTranslate付费版,确定GTranslate插件没有使用 /go/ 作为二级目录和二级域名。

发现使用Pretty Link插件添加重定向陈沩亮博客的Telegram频道链接时:
https://www.chenweiliang.com/go/tgchannel

  • (这是因为Pretty Link插件的跳转链接,被 .htaccess 文件里的RewriteRule重定向规则覆盖了)

竟然会自动跳转到不存在的子域名:
http://go. chenweiliang.com/go/tgchannel

  • (为避免出现死链接,所以在上方链接的 go. 后面添加空格)

然而,在陈沩亮博客的 .htaccess 文件里搜索,并没有找到包含 /go/ 的 RewriteRule。

当我尝试删除GTranslate config RewriteRule 之后,此链接居然成功重定向了:
https://www.chenweiliang.com/go/tgchannel

  • 所以,我非常确定是 GTranslate config RewriteRule 造成子目录链接 /go/ 的重定向错误。

如何排除 /go/ 子目录重定向?

若是需要设置排除多个不同的子目录,可参考下方的重定向规则进行添加 ▼

RewriteCond %{REQUEST_URI} !^/?(directory1|directory2)($|/)
  • directory1|directory2|etc 中放置所需数量的目录。
  • 这应该是“如果 REQUEST_URI 不以 /directory1 或 /directory2 开头”。

它将匹配:

  • /directory1/dasdas
  • /directory1
  • /directory1/

等等……

如何在 RewriteRule 设置排除 /go/ 跳转链接?

只需将以下“排除 /go/ 子目录重定向”的规则,添加到GTranslate重定向规则的上面即可 ▼

# Exclude /go/ subdirectory redirection
RewriteCond %{REQUEST_URI} !^/?(go)($|/)

### BEGIN GTranslate config ###
RewriteRule ^([a-z]{2}|af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(.*)$ http://$1.chenweiliang.com/$2 [R=301,L,QSA]

RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(.*)$ /$1/$3 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(.*)$ /wp-content/plugins/gtranslate/url_addon/gtranslate.php?glang=$1&gurl=$2 [L,QSA]
RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)$ /$1/ [R=301,L]
### END GTranslate config ###

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动到顶部