【问题标题】:htaccess on wordpress network siteWordPress 网站上的 htaccess
【发布时间】:2012-09-29 20:56:59
【问题描述】:

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

这是我的设置细节(我无法显示或允许访问该网站,因为我已同意某种 NDA)

  1. 有 2 个站点。第一个是根站点“/”,第二个是“/mythoughts/”,如网络管理员中所示。
  2. “/mythoughts/”网站替代了某人构建的旧自定义博客,该博客使用 url 中的变量(自定义)
  3. 我使用的主题是 20 和 root(显然 root 不会像在网络设置上那样进行整洁的 url 重写)

问题是这样的。

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

其次,旧网站在 2 个实例中的 url 中有变量。

第一个例子是这个

www.thesite.com/mythoughts/index.php?year=2010&month=9

我需要重写为

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?thought=101

应该改写成

www.thesite.com/mythoughts/title-of-the-post

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

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

# BEGIN WordPress
<IfModule mod_rewrite.c>

RewriteEngine On
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).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
    RewriteRule . index.php [L]



</IfModule>

#END WordPress

如果有人能帮助我在整个 htaccess 事情(过去几周我一直在努力解决的问题)上为我指明正确的方向,我将非常感激。

在此先感谢大家。

【问题讨论】:

    标签: wordpress .htaccess redirect


    【解决方案1】:

    首先,你有:

    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 中没有看到任何脚本,可能是您包含了规则或脚本。

    【讨论】:

    • jon lin,谢谢你的回复,我终于找到了答案,你说的完全正确,我现在开始慢慢理解他们称之为 htaccess 的野兽。
    【解决方案2】:

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

    这就是我最终的结果。

    在第一个使用双 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]
    

    所以最初的网址应该是

    www.site.co.uk/mythoughts/index.php?year=2010&month=12
    

    重写结果是

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

    完美!!!!

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

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

    www.site.co.uk/mythoughts/index.php?though=21
    

    这篇文章或数据库条目有一个标题,并且在 wordpress 中,该标题用于永久链接

    原来如此

    www.site.co.uk/mythoughts/sublime-and-powerful-outcomes
    

    脚本将 id 作为重写的第一个条件,并将 id 放在它的位置。第二部分取帖子的标题,并用删除的破折号和特殊字符交换空格。

    这会产生新的网址。

    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 抽出时间回答这个问题。

    希望这对某人有所帮助

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多