wordpress网站上的htaccess

wordpress网站上的htaccess,wordpress,.htaccess,redirect,Wordpress,.htaccess,Redirect,我一直在努力解决wordpress网站上htaccess的一个问题,过去我从stackoverflow获得了很多信息,我认为这是最好的提问地点。如果我发帖不正确,我会提前道歉,这是我第一次 以下是我的设置细节(我无法显示或允许访问该网站,因为我已同意各种保密协议) 有两个站点。第一个是根站点“/”,第二个是“/mythoughts/”,如networkadmin中所示 “/mythoughts/”网站是一个旧的自定义博客的替代品,该博客由用户使用url中的变量创建(自定义) 我使用的主题是twe

我一直在努力解决wordpress网站上htaccess的一个问题,过去我从stackoverflow获得了很多信息,我认为这是最好的提问地点。如果我发帖不正确,我会提前道歉,这是我第一次

以下是我的设置细节(我无法显示或允许访问该网站,因为我已同意各种保密协议)

  • 有两个站点。第一个是根站点“/”,第二个是“/mythoughts/”,如networkadmin中所示
  • “/mythoughts/”网站是一个旧的自定义博客的替代品,该博客由用户使用url中的变量创建(自定义)
  • 我使用的主题是twentyten和roots(显然,roots在网络设置中不会进行整洁的url重写)
  • 问题是这个

    首先,“index.php正在从url中删除(这不是问题,但我认为在尝试进行其他重写时可能会导致问题)

    其次,旧站点的URL中有两个实例中的变量

    第一个例子是这样的

    www.thesite.com/mythoughts/index.php?year=2010&month=9
    
    www.thesite.com/mythoughts/index.php?thought=101
    
    我需要重写为

    www.thesite.com/mythoughts/2010/9
    
    首先,index.php会自动删除

    我尝试过很多不同的事情,比如

    RewriteRule ^mythoughts/index.php?year=(.*)&month=(.*)$ mythoughts/$1/$2 [R=301,L]
    
    不起作用

    第二个例子是这样的

    www.thesite.com/mythoughts/index.php?year=2010&month=9
    
    www.thesite.com/mythoughts/index.php?thought=101
    
    应该重写为

    www.thesite.com/mythoughts/title-of-the-post
    
    我有一个脚本,可以将url变量与文章标题相匹配(并替换或删除非法字符),但重写不起作用

    这是我目前拥有的htaccess(一个纯wordpress)

    #开始WordPress
    重新启动发动机
    重写基/
    重写规则^index\.php$-[L]
    #上传的文件
    重写规则^([_0-9a-zA-Z-]+/)?文件/(.+)wp包含/ms files.php?文件=$2[L]
    #在/wp admin中添加尾部斜杠
    重写规则^([_0-9a-zA-Z-]+/)?wp admin$$1wp admin/[R=301,L]
    RewriteCond%{REQUEST_FILENAME}-f[或]
    RewriteCond%{REQUEST_FILENAME}-d
    重写规则^-[L]
    重写规则^[_0-9a-zA-Z-]+/(可湿性粉剂-(内容|管理|包括)。*)$1[L]
    重写规则^[_0-9a-zA-Z-]+/(.\.php)$$1[L]
    RewriteRule.index.php[L]
    #结束WordPress
    
    如果有人能帮我在htaccess这件事上找到正确的方向(我在过去几周一直在努力解决这个问题),我将非常感激


    提前感谢各位朋友。

    首先,您有:

    RewriteRule ^mythoughts/index.php?year=(.*)&month=(.*)$ mythoughts/$1/$2 [R=301,L]
    
    但是,您不能在重写规则中与查询字符串匹配。此外,由于您有一个规则要重写它,因此您只需创建一个重定向循环。您需要与实际请求匹配,而不是与URI匹配

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /mythoughts/index\.php\?year=([^&]*)&month=([^&\ ]*)
    RewriteRule ^ mythoughts/%1/%2 [R=301,L]
    
    至于:

    我有一个脚本,可以将url变量与文章标题相匹配(并替换或删除非法字符),但重写不起作用


    我在您的htaccess中没有看到任何脚本,如果您包括规则或脚本的话。

    在继续搜索之后,即使我在堆栈(大)溢出上发布了问题

    这就是我的结局

    在第一个使用双url字符串的实例中,答案是

    RewriteCond %{THE_REQUEST} ^[A-Z]+\ /mythoughts/index\.php\?year=([0-9\-]+)&month=([0-9\-]+)\ HTTP/ [NC]
    RewriteRule ^index\.php$ http://site.co.uk/mythoughts/%1/%2? [R=301,L]
    
    所以最初的url应该是

    www.site.co.uk/mythoughts/index.php?year=2010&month=12
    
    重写的结果是

    www.site.co.uk/mythoughts/2010/12/
    
    完美

    在第二种情况下,首先回答乔恩的问题

    该脚本是用php编写的,它从url变量的id扫描旧的数据库concatin字符串,例如下面url中的变量

    www.site.co.uk/mythoughts/index.php?though=21
    
    此帖子或数据库条目有一个标题,在wordpress中,该标题用于永久链接

    是的

    www.site.co.uk/mythoughts/sublime-and-powerful-outcomes
    
    脚本将id作为重写的第一个条件,并将id放在原处。第二部分获取文章的标题,并用删除的破折号和特殊字符交换空格

    这将产生新的url

    RewriteCond %{THE_REQUEST} ^[A-Z]+\ /mythoughts/index\.php\?thought=21
    \ HTTP/ [NC]
    RewriteRule ^index\.php$ http://site.co.uk/mythoughts/sublime-and-powerful-outcomes? [R=301,L]
    
    感谢乔恩花时间回答这个问题


    希望这对某人有所帮助

    jon lin,谢谢你的回答,我最终找到了答案,你说的完全正确,我现在开始慢慢理解他们称之为htaccess的野兽。这是帮助我搜索的来源