.htaccess仅重定向index.php(如果变量后排除)

时间:2017-07-20 03:40:44

标签: php apache .htaccess

长话短说,我更新了一个电子商务网站,但不得不将新的静态CMS系统安装到子目录(/ wear)中。主要的电子商务商店仍然位于根目录(/)中,由于产品数量和SEO的影响,我需要将其留在那里。

我想设置只是index.php 的请求,以重定向到/ wear /

同时,如果有index.php?XXXXX的请求,我希望它仍然使用index.php文件。

我尝试过使用以下.htaccess代码,但它会重定向所有内容。谁能帮我这个?我为此问道道歉,因为我知道有多个线程,但似乎都没有提供一个好的答案。

尝试1

RedirectMatch  /index.php https://domain/wear/

尝试2

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

1 个答案:

答案 0 :(得分:1)

问题来自您的RewriteBase。将其设置为/wear/时,RewriteRule ^index\.php$ - [L]实际上会转换为RewriteRule ^wear/index\.php$ - [L],而这并不是您想要的。

我会尝试这样的事情:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^index\.php$ /wear/ [L,R=301]

它的作用是:检查查询字符串是否为空,如果是,则将index.php(在请求URI的开头,仅限/index.php)重定向到/wear/

您还需要确保mod_rewrite处于有效状态。

为此,您可以删除<IfModule mod_rewrite.c></IfModule>部分。如果mod_rewrite不可用,则会触发错误500,因为RewriteEngine命令将无法识别。