我想从 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]