仅使用htaccess重定向文件夹,而不是使用文件夹中的页面

时间:2014-06-04 12:58:20

标签: .htaccess redirect directory

我有一个基于此动态生成的链接结构:

http://www.website.com/profiles/

此页面显示所有个人资料的列表。

出于过滤原因,我们还有

http://www.website.com/profile-category/categoryA/

这只会列出类别A的个人资料。但是,如果从此网址中删除了“/ categoryA /”,则会找不到404页面。

我想重定向http://www.website.com/profile-category/http://www.website.com/profile-category/categoryA/不受影响。这可能是使用.htaccess吗?

我知道.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

1 个答案:

答案 0 :(得分:1)

要确保在匹配裸目录路径后没有任何内容,请使用$终止它,并可选择允许使用/?的尾部斜杠。订单对于重写规则非常重要,因此您必须将此放在WordPress的最终包含所有规则之前。

首先,测试将它放在任何WordPress&#39;之前。规则。如果做不到,请将它插入它们之间。

RewriteEngine On
# Redirect profile-category with nothing following to /profiles list
RewriteRule ^profile-category/?$ /profiles [L,R=301]

# Then WordPress
# 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

我上面留下了WP的完整区块,因为我不确定它是否是由应用程序动态编写的(偶尔会破坏你的规则)。整套规则的更合乎逻辑的安排是:

RewriteEngine On
RewriteBase /

# Never modify requests to index.php
RewriteRule ^index\.php$ - [L]

# Redirect profile-category with nothing following to /profiles list
RewriteRule ^profile-category/?$ /profiles [L,R=301]

# Wordpress - write all requests to non-existing files & dirs
# into index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]