使用htaccess将所有.html文件重定向到根文件夹

时间:2015-06-16 14:49:41

标签: php wordpress apache .htaccess mod-rewrite

我的.htaccess档案

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L]

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

reading this answer之后我尝试在RewriteRule ^(.*)\.html$ / [L,R=301]之后添加RewriteCond %{REQUEST_FILENAME} !-d,将html文件重定向到根文件夹,但其他网址停止工作。

PS :我不习惯使用.htaccess文件。

3 个答案:

答案 0 :(得分:1)

将根重定向代码放在WordPress代码上面,如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L]

    # This will check that the .html is not a true file
    # and if so, redirect to root
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)\.html$ / [L,R=302]

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

注意,在您对重定向感到满意之前,请使用R=302(临时重定向)。否则,您可能会“永久”重定向到无意中的位置。

答案 1 :(得分:1)

你应该在RewriteConds之前添加新的RewriteRule,因为它不需要任何重定向条件。

此外,您还可以保存旧的重定向规则。 RewriteCond仅影响它之后的第一个RewriteRule。在RewriteConds之后放置新的RewriteRule可以在所有情况下实现旧的RewriteRule而不受任何限制。

因此,你的htaccess的片段看起来应该是

RewriteRule ^(.*)\.html$ / [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

答案 2 :(得分:0)

如果我清楚地理解,你的.htaccess现在看起来像这样:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ / [L,R=301]
RewriteRule . /index.php [L]
</IfModule>

由于RewriteCond规则仅影响其下方的一个RewrtieRule,因此

RewriteRule . /index.php [L]

现在适用于每个请求。只需将.htaccess更改为:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L]
RewriteRule ^(.*)\.html$ / [L,R=301]

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