Wordpress mod_重写规则不起作用

Wordpress mod_重写规则不起作用,wordpress,mod-rewrite,Wordpress,Mod Rewrite,多年来,我一直在使用mod_重写规则,这更是我不理解为什么这不起作用的原因: RewriteRule ^cottage/house/(.*)/(.*)$ /cottage/house/$1?query=$2 [L] 我将它与以下.htaccess文件一起使用: RewriteEngine On Rewritecond %{HTTP_HOST} !^www\.website\.com RewriteRule (.*) http://www.website.com/$1 [R=301,L] R

多年来,我一直在使用mod_重写规则,这更是我不理解为什么这不起作用的原因:

RewriteRule ^cottage/house/(.*)/(.*)$ /cottage/house/$1?query=$2 [L]
我将它与以下.htaccess文件一起使用:

RewriteEngine On

Rewritecond %{HTTP_HOST} !^www\.website\.com
RewriteRule (.*) http://www.website.com/$1 [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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]

此代码应创建一个URL,格式为
/cottle/house/housename/about
转到
/cottle/house/housename?query=about
。。。如果您有任何想法,我们都将不胜感激。

如果仅凭自己的想法使用,该规则将非常有效

问题在于规则中的
[L]
仅意味着在此处理步骤中不再处理此规则集(.htaccess文件)中的规则

但是,重写后的URL
/shottle/house/housename?query=about
将返回给URL解析引擎。由于匹配规则导致内部重定向,因此规则集将再次处理URL(作为子请求)

我猜与
/shottle/house/housename?query=about
匹配的真实文件或目录不存在,我还假设此URL不会被其他规则捕获。这将导致规则
重写规则。index.php[L]
匹配,这将导致另一个子请求,这次是在
index.php
上,它将显示索引页面。这就是为什么这条规则似乎不能正常工作的原因

如何解决这个问题


确保第一个子请求被常规规则捕获。实际的
重写规则
取决于整个URL结构的外观,以及哪些其他规则(示例代码中没有给出)处于活动状态。

我设法解决了这个问题-Wordpress有自己的方法来处理
mod_rewrite

下面的代码以Wordpress理解的方式在内部重写URL:

function ong_custom_house_pages() 
{
    function add_query_vars($houseVars) 
    {
        $houseVars[] = "current_house_page"; 
        return $houseVars;
    }
    add_filter('query_vars', 'add_query_vars');
    add_rewrite_rule("^houses/([^/]+)/([^/]+)/?",'index.php?
    houses=$matches[1]&current_house_page=$matches[2]','top');
}
add_action('init','ong_custom_house_pages');

希望这能帮助任何有类似问题的人。

上面文件中的规则(不起作用)到底放在哪里?感谢您的帮助。不幸的是,我尝试在
.htaccess
文件中的几乎每个位置插入代码int,但仍然不起作用。我应该在规则中使用与
[L]
不同的东西吗?我已经尝试将其修改为
重写规则^rottle/house/(.+)/(.+)$rottle/house/$1?house_page=$2[R]
,并改为
[N]
,但是仍然不走运。正如我在回答中提到的,您需要确保在再次处理完整的规则集时以某种方式捕获重写的规则(顺便说一句,不管是通过
[L]
还是
[R]
)。重写完成后应显示哪一页?我的意思是,重写的目标URL是否以某种方式存在?它只是虚拟存在-该站点是使用Wordpress构建的,但我当前的实现意味着它需要使用URL中的变量来解析页面中的正确数据。因此,这完全是对index.php的重写。有没有什么特别的方法来确保它再次被捕获?是否可以修改规则以指示Apache再次运行它?谢谢你的帮助!请尝试将规则中的
[L]
从初始问题更改为
[NS]
。这将导致在子请求中跳过它,因此正常的Wordpress链接机制应该有效。如果这不起作用,您可能希望在问题中添加有关使用Wordpress的信息(也可以作为问题的标记),以便Wordpress专家可以更好地帮助您。