我在域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]
请帮助我理解该错误以及如何使它起作用。
答案 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之前添加以上代码。
希望这会有所帮助。