我试图从本地wordpress实例(由MAMP运行)重新路由所有流量
localhost:8080/mydomain
至localhost:8080/mydomain/dashboard
,但有例外。如果URI具有如下查询参数,我不想重新路由URI:
localhost:8080/mydomain/?post_type=ignition_product&p=23&preview=1
。查询参数p
将更改。
我已经阅读了In Depth Guide to mod-rewrite,但我仍然遇到问题。
我做了一次尝试,但我认为这是一个残酷的错误:
// done by wordpress
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /mydomain/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /fundblack/index.php [L]
// added by me
RewriteCond ...need help here trying to ignore if there are query params...
RewriteRule ^mydomain/?(\w+)$ - [L]
RewriteRule ^mydomain/$ mydomain/dashboard
</IfModule>
# END WordPress
subdomain.subdomain.mydomain.com
只是做了这件事,但它不起作用:
RewriteBase /
RewriteCond %{REQUEST_URI} !^/dashboard.* [NC]
RewriteCond %{REQUEST_URI}%{QUERY_STRING} !^/post_type=ignition_product&p=.*&preview=1$ [NC]
RewriteRule ^(.*)$ dashboard/$1 [R=301,L]
可能是什么问题?
答案 0 :(得分:1)
您没有两个重写规则,只有.htaccess
/mydomain/
个RewriteBase /mydomain/
RewriteCond %{REQUEST_URI} !^/mydomain/dashboard.* [NC]
RewriteCond %{REQUEST_URI}%{QUERY_STRING} !^/mydomain/post_type=ignition_product&p=.*&preview=1$ [NC]
RewriteRule ^(.*)$ dashboard/$1 [R=301,L]
文件夹中的两个条件:
localhost:8080/mydomain/dashboard/anything
如果您尝试直接访问p
,则第一个条件会阻止无限循环,第二个条件会为?
参数的任何值排除带有该查询字符串的网址(请注意缺少%{REQUEST_URI}%{QUERY_STRING}
}不是拼写错误,因为它不包含在撰写的/mydomain/
)中。
此外,由于您之前拥有RewriteBase /mydomain/
,因此您不需要在规则中使用RewriteBase
。
修改:要将其放入最终域名,请删除/
,因为不需要,并将.htaccess
直接放入规则中(我在第一个答案中使用它)因为您已在原始RewriteCond %{REQUEST_URI} !^/dashboard.* [NC]
RewriteCond %{REQUEST_URI}%{QUERY_STRING} !^/post_type=ignition_product&p=.*&preview=1$ [NC]
RewriteRule ^(.*)$ /dashboard/$1 [R=301,L]
中定义了它:
{{1}}
答案 1 :(得分:0)
因此,在您的WP Direcory /mydomain/dashboard
中,如果您愿意,只需放置一个通用的WP .htaccess文件。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /mydomain/dashboard/
RewriteRule ^/?mydomain/dashboard/index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END WordPress
但是在/mydomain
文件夹中,您将以下内容放在htaccess中:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} !^post_type=([^&]+)&([^=]+)=([^&]+)&preview=([^&]+)$
RewriteCond %{REQUEST_URI} ^/?mydomain/?$
RewriteRule ^/?mydomain(/.*)?$ /mydomain/dashboard$1 [R=301,L]
</IfModule>
此版本对于您的查询字符串非常灵活,但如果您希望拥有固定值,只需根据需要进行更改。
<IfModule mod_rewrite.c>
和</IfModule>
在两种情况下都是可选的,但如果禁用mod_rewrite,它将保护您免受任何服务器错误的影响。