我正在尝试重定向这些网页
/reviews/page/2/
/reviews/page/3/
到这个
/reviews/
使用这一行:
Redirect 301 /reviews/page/./ /reviews/
但它没有用。我尝试了其他组合,例如.*
和^.*$
,但没有任何效果。只有特定的URL才会被重定向到新的URL。
还有什么可能会影响我尝试工作的路线吗?也许是空格,大写,小写,缩进等?
整个文件粘贴在下面。
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
# 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
# --------------------------------
# | ADDITIONAL RULES |
# --------------------------------
<FilesMatch "^robots\.txt">
Order Allow,Deny
Allow from all
</FilesMatch>
<FilesMatch "^\.htaccess|.*\.cgi">
Order Deny,Allow
Deny from all
</FilesMatch>
Redirect 301 /reviews/page/./ /reviews/
答案 0 :(得分:1)
mod_alias Redirect
指令是前缀匹配,它不接受通配符或正则表达式。所以,理论上你可以做类似的事情:
Redirect 301 /reviews/page/ /reviews/
但是,如上所述,Redirect
指令是前缀匹配,匹配后的所有都被复制到目标URL的末尾。因此,/reviews/page/2/
的请求会被重定向到/reviews/2/
- 这是不可取的。
您可以使用RedirectMatch
代替,它使用正则表达式而不是简单的前缀匹配。但是,由于您已经在使用mod_rewrite(RewriteRule
)指令,因此最好为此使用mod_rewrite以避免潜在的冲突。不管在配置文件中这些指令的明显顺序如何,不同的Apache模块在请求期间的不同时间执行。
相反,请在.htaccess
指令后面的RewriteEngine
文件顶部尝试以下mod_rewrite指令:
RewriteRule ^reviews/page/[23]/$ /reviews/ [R=302,L]
这符合/reviews/page/2/
或/reviews/page/3/
的任何请求,并重定向到/reviews/
。使用字符类匹配2
或3
。请注意,在每个目录.htaccess
文件中,RewriteRule
模式匹配的URL路径不以斜杠开头。
这也是302(临时)重定向。将此更改为301(永久)重定向 - 如果这是意图 - 但只有在您测试它正常工作之后。 301s被浏览器缓存,因此可能会使测试成为问题。
在测试之前,您需要清除浏览器缓存。
更新:要匹配任何数字,您可以将[23]
更改为\d
(数字的速记字符类。要匹配1或2位数,您可以使用{{ 1}}。例如:
\d{1,2}
您可以使用RewriteRule ^reviews/page/\d{1,2}/$ /reviews/ [R=302,L]
(点)来匹配任何字符。但是,对于看起来像页码的内容,这可能过于宽泛。正则表达式(正则表达式)应尽可能具有限制性。