.htaccess 301 重定向从 URL 中删除

.htaccess 301 重定向从 URL 中删除

我想从 URL 中删除“[”和“]”并重定向到正确的链接。

以下是示例 URL:

/forums/garage-150/cool-cars-sightings-[archived]-7610/index127.html

需要重定向至:

/forums/garage-150/cool-cars-sightings-archived-7610/index127.html

这是我迄今为止所创作的,但仍然不起作用。

Options +FollowSymlinks
Options +Indexes
RewriteEngine on
RewriteRule ^/forums/(.*)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301]

答案1

您的指令看起来不错,但如果这是在,.htaccess那么您需要从中删除斜线前缀RewriteRule 图案。 例如:

RewriteRule ^forums/(.+)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301,L]

RewriteRule指令目录上下文(包括.htaccess)与 URL 路径匹配减去目录前缀。 这目录前缀总是以斜线结尾,因此 URL 路径RewriteRule 图案匹配项永远不会以斜线开头。

L如果您(计划)有更多指令,则可能需要添加标志。 (我还将第一个捕获组从 更改.*.+,因为这里不可能实现零宽度匹配。


更新:

我放置此代码的 htaccess 位于/目录中。目录.htaccess中也有/forums

.htaccess如果子目录中存在/forums也使用 mod_rewrite 的文件,则(默认情况下)这将完全覆盖上面的指令(在根.htaccess文件中)。甚至不会处理上述指令。

解决此问题最简单的方法是将上述指令移到文件中/forums/.htaccess(靠近顶部)。由于此重定向特定于论坛,因此这似乎也是最合乎逻辑的方法。但是,您还需要更改RewriteRule 图案读书:

RewriteRule ^(.+)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301,L]

相关内容