我的.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文件。
答案 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>