我有一个基于此动态生成的链接结构:
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
答案 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]