HTACCESS重写不适用于非WP目录

时间:2018-11-30 04:50:07

标签: php wordpress .htaccess mod-rewrite

我在域example.com的根文件夹中安装了WordPress,并且还有另一个具有自定义PHP代码example.com/control/的目录。

在没有安装WordPress的情况下,我的.htaccess文件将/control/show.php?id=2重定向为/control/2/并可以正常工作,但是一旦我在根目录中安装了WP,它就不再起作用。

.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
</IfModule>
# END WordPress

/control/.htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^control/([^/]*)$ /control/show.php?id=$1 [L,QSA,NC]

请帮助我理解该错误以及如何使它起作用。

2 个答案:

答案 0 :(得分:1)

  

control/.htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^control/([^/]*)$ /control/show.php?id=$1 [L,QSA,NC]

这在/control/.htaccess文件中不起作用,因为RewriteRule伪指令的写法就像在文档根目录的.htaccess文件中一样。

.htaccess中,RewriteRule 模式与URL路径匹配,减去目录前缀(导致.htaccess文件)。换句话说,它与2/而不是control/2/匹配。这就是上述指令不起作用的原因。

这不是错误,但是您也无需在 substitution 中明确声明/control/子目录,因为只要使用相对路径替换,该子目录就会自动添加前缀。同样,您也不需要RewriteBase指令(在这种情况下,它的设置可能还是不正确)。

因此,上面的文字应改为以下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ show.php?id=$1 [QSA,L]

在此示例中,NC标志也是多余的。

您应在正则表达式中尽可能具体。如果“ id”始终为位数(如您的示例),则修改RewriteRule 模式以仅匹配数字:^(\d*)$ (0个或更多数字)。

答案 1 :(得分:0)

您无需创建控件.htaccess

RewriteRule ^control/([^/]*)$ /control/show.php?id=$1 [L,QSA,NC]

在WordPress htaccess文件中的#BEGIN WordPress之前添加以上代码。

希望这会有所帮助。

相关问题