REQUEST_URI RewriteCond语法

时间:2014-06-06 03:12:53

标签: regex wordpress apache .htaccess mod-rewrite

我确信我在做一些愚蠢的事情,但我似乎无法弄明白它是什么。

我无法理解为什么{REQUEST_URI}的RewriteCond没有评估为true,从而阻止了RewriteRule的触发。相反,给出以下网址,规则会触发,用户始终会被带到https://www.diffsite.com

真的很感激任何帮助 - 并提前感谢。

网址

http://www.regularsite.com/page-name/

.htaccess代码

# Use PHP5.4 as default
AddHandler application/x-httpd-php54 .php

# BEGIN WordPress
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_USER_AGENT} (iphone|ipod|android|symbian|windows\phone|blackberry|iemobile|opera\ mobile|palmos|webos|googlebot-mobile) [NC]
RewriteCond %{REQUEST_URI} !^page-name/ [NC]
RewriteRule ^(.*)$ https://www.diffsite.com/ [L,R=302]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>
# END WordPress

1 个答案:

答案 0 :(得分:0)

%{REQUEST_URI}始终匹配以前导斜杠/开头的URI,因此这对您有用:

RewriteCond %{REQUEST_URI} !^/page-name/ [NC]

但是在您的规则中RewriteCond %{REQUEST_URI}甚至不需要,因为您可以在RewriteRule本身中执行此否定:

RewriteCond %{HTTP_USER_AGENT} (iphone|ipod|android|symbian|windows\phone|blackberry|iemobile|opera\ mobile|palmos|webos|googlebot-mobile) [NC]
RewriteRule !^page-name/ https://www.diffsite.com/ [NC,L,R=302]

.htaccess内的RewriteRule内部斜杠内部不匹配。