1

我已经设置了重写规则 =

RewriteRule ^names/([a-zA-Z0-9_]+|)(-in-|)([a-zA-Z0-9_]+|)(-|)([a-zA-Z0-9_]+|)(-|)([0-9]+|)/?$ query.php?sector=$1&location=$3&firmname=$5&firmnumber=$7

它按预期工作,即当输入 /names/something_else-in-somewhere-somename-100 时,它将这些变量值传递给 query.php 页面。

这是在使用 WordPress 的网站上构建的,我遇到了似乎默认的 WordPress htaccess 规则的问题,阻止我在没有 /names/ 的情况下使用上面的重写规则 - 因为我只想查询字符串作为 url。

但是,如果我从重写规则中删除 ^names/,它将阻止 WordPress 页面的可访问性。我已将我的重写代码放在 htaccess 文档的顶部,如下所示:

RewriteEngine On
RewriteBase /
RewriteRule ^names/([a-zA-Z0-9_]+|)(-in-|)([a-zA-Z0-9_]+|)(-|)([a-zA-Z0-9_]+|)(-|)([0-9]+|)/?$ query.php?sector=$1&location=$3&firmname=$5&firmnumber=$7 
ErrorDocument 404 /404.php 
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress

如果我将重写规则置于 WordPress 规则之下,它将停止一起工作。任何人都可以解释为什么会这样,并指出我解决这个问题的正确方向吗?

4

2 回答 2

1

尝试这个。在 WP htaccess 的最后一行之后添加另一个 RewriteBase

RewriteBase /names/
RewriteRule ^names/([a-zA-Z0-9_]+|)(-in-|)([a-zA-Z0-9_]+|)(-|)([a-zA-Z0-9_]+|)(-|)([0-9]+|)/?$ query.php?sector=$1&location=$3&firmname=$5&firmnumber=$7
于 2013-04-24T12:08:57.377 回答
0

您必须使用[L]来标记规则的结束。将您的规则更改为:

RewriteRule ^names/([a-zA-Z0-9_]+|)(-in-|)([a-zA-Z0-9_]+|)(-|)([a-zA-Z0-9_]+|)(-|)([0-9]+|)/?$ query.php?sector=$1&location=$3&firmname=$5&firmnumber=$7 [L,QSA,NC]
于 2013-04-24T13:57:47.127 回答