我的.htaccess文件中有一个RedirectMatch规则可以正常工作,但我在使用mod_rewrite时遇到类似的规则时遇到了麻烦。
我的目标是拥有以下网址:mysite.com/anything/print显示此页面:mysite.com/anything?view=print。
用于重定向它的规则是:
RedirectMatch 301 ^(.*)/print/?$ http://mysite.com/$1?view=print
但现在我想使用mod_rewrite将其从可见的301重定向更改为“隐形”重写。我已尝试过很多不同的变体(有和没有RewriteBase),但没有一个有效:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/print/? $1?view=print
我做错了什么? Mod_rewrite肯定已启用,并且在同一.htaccess文件中有基于Wordpress的mod_rewrite规则。
更新
使用来自@Nathan的提示,我现在有了这个。但是,当我访问mypost / print时,我仍然得到404.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)/print/?$ /index.php/$1?view=print [L]
当我将/ print /追加到固定链接时,WP_Debug插件会指示以下内容:
请求: myposttype/mypost/print
查询字符串: attachment=print
匹配重写规则: myposttype/[^/]+/([^/]+)/?$
匹配重写查询: attachment=print
答案 0 :(得分:2)
如果您在htaccess文件中有典型的wordpress规则,那么您的规则应该在# BEGIN WordPress
块之前。否则,wordpress规则将在您的规则被调用之前停止重写匹配。
此外,您应该在正则表达式模式之后添加$
,除非您还希望匹配以下内容:http://domain.com/page/print/something/else/here
最后,为了让Wordpress能够在不重定向页面的情况下识别URL中的更改,您需要将URL附加到index.php/
,以便Wordpress将使用路径信息永久链接。
E.g。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)/print/?$ /index.php/$1?view=print [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
答案 1 :(得分:1)
RewriteEngine on
RewriteRule ^(.*)/print/$ /$1?view=print [L]
或
RewriteRule ^(.*)/print$ /$1?view=print [L]
在URL字符串
末尾没有“/”