Php .htaccess使用WordPress插件重写

Php .htaccess使用WordPress插件重写,php,wordpress,.htaccess,mod-rewrite,multisite,Php,Wordpress,.htaccess,Mod Rewrite,Multisite,我正在为自定义WordPress多站点网络构建WordPress插件,并且有一些文件使用URL变量从第二个数据库(而不是WordPress数据库)加载信息 在WordPress之外构建的版本中,导航到http://website.com/NAME-HERE它将检查它是否是我数据库中的用户名,如果不是,则检查它是否是我数据库中的一个组,并加载与它是否是用户名或组相对应的文件 现在我完全不知道如何在WordPress Multisite中实现这一点。据我所知,插件不能使.htaccess重写?如何使

我正在为自定义WordPress多站点网络构建WordPress插件,并且有一些文件使用URL变量从第二个数据库(而不是WordPress数据库)加载信息

在WordPress之外构建的版本中,导航到
http://website.com/NAME-HERE
它将检查它是否是我数据库中的用户名,如果不是,则检查它是否是我数据库中的一个组,并加载与它是否是用户名或组相对应的文件

现在我完全不知道如何在WordPress Multisite中实现这一点。据我所知,插件不能使
.htaccess
重写?如何使其在所有网络站点上工作

如果不是的话,最好的方法是什么

我是否需要将我的
pretty.php
&
.htaccess
重写内容放入我的根目录,并将页面指向插件中的文件?如果是这样的话,如何处理多个主题

到目前为止,我唯一的另一个想法是,也许这可以通过
RewriteMap
这样的方法来实现

在这一点上,我认为我最好的办法是向StackOverflow社区寻求帮助或指导

.htaccess

RewriteEngine On  
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]  
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]  

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(\w.+)$ ./pretty.php?pretty=$1 [QSA]

ErrorDocument 404 /404.php
pretty.php

// First check if passed pretty parameter is a username.
if(checkIfUserByUsername($_GET['pretty']))
{
    $_GET['username'] = $_GET['pretty'];

    include("USERNAME.php");

// If not a username, check to see if it's an event.
}else if(checkIfStreamByPretty($_GET['pretty'])){
    $_GET['id'] = getStreamIdFromPretty($_GET['pretty']);

    include("GROUP.php");
}else{
    // If it's none, redirect to the 404 page.

    include("404.php");
}
我想提供我想要完成的更多内容,我正在创建页面模板文件,其中一个用于配置文件,另一个用于组,正如您在上面看到的my.htaccess和pretty.php,我位于页面模板文件的顶部,然后使用

$user_id = getIdFromUsername($_GET['username']);
$_GET['user_id'] = $user_id;

我真的很难弄清楚如何以一种允许它处理多个主题的方式来处理这个问题。在这一点上,我只是在寻找任何一种解决方案。

如果我理解您想要实现的目标,您可以通过几种方法来实现这一点。您可能不需要使用任何重写

最简单的解决方案是将“pretty.php”代码添加到Wordpress模板中的header.php文件中。这将加载到网站前端的每个请求。如果您需要它只在特定页面上加载代码,只需检查您使用的页面是什么页面

例如,在header.php中:

if(is_page("groups")){
  if(checkIfUserByUsername($_GET['pretty']))
  {
    // the rest of your code
  }
}
如果您想编写Wordpress插件,只需在插件中使用“添加动作”:

add_action('wp_head', 'function_containing_your_code');
同样,这将加载到每个页面上,因此只需检查您的代码是否位于要加载代码的页面上

此外,您可以编辑.htaccess文件,就像您可以编辑用户有权编辑的任何文件一样。假设您正在运行apache服务器,则.htaccess文件需要具有允许编辑该文件的权限,并且您可以使用PHP编辑该文件。例如:

$file = fopen("/path/to/.htaccess", "a+");
fwrite($f, "RewriteRule ^(\w.+)$ ./pretty.php?pretty=$1 [QSA]");
fclose($f);

许多人会说,让PHP写入.htaccess文件是一种安全风险。我想说,在某些情况下这是正确的,但肯定不总是如此。在允许PHP写入.htaccess文件之前,请先了解权限

除了John Gile的答案,请清理Get参数。您可以阅读一些消毒选项

在您的问题上下文中,类似于
$username=sanitize\u text\u字段($\u GET['pretty'])应该足够了。但请更深入地了解什么需要消毒

关于你最初的问题,约翰建议的第一种方法似乎更好

考虑一下两个单独的请求正在使用相同的用户名请求相同的url。由于文件读/写是一个阻塞流,因此其中一个请求必须等待流关闭,并且直到发生这种情况,网站才会呈现

如果您通过附加流或其他方式绕过此操作,则可能会导致重复条目或更糟的是文件损坏,从而导致服务器错误

编辑

我不太清楚你想通过include
include('USERNAME.php')
实现什么目标,你是否为每个注册“多站点网络”的用户创建了一个专用的php文件?如果是这样的话,我认为你在计划这件事时做出了错误的决定

通常,当您希望根据外部资源共享、控制或更改行为时,您会以数据格式获取数据

现在如果我站在你的立场上,我会创建一个web服务,它根据username get参数返回JSON,并根据输入的数据控制输出

创建api是相当复杂的,根据您的需要,您可以选择最适合这些api的工具。我个人喜欢为复杂的事情和小事情工作。如果您愿意,也可以自己创建


创建api后,您就可以很容易地获得JSON,其中包含所描述的
文件\u get\u contents()
,或者使用您可以为php找到的任何rest工具。

不清楚您希望获得什么样的结果。请把你的问题分解成更简洁的问题,说明你真正想要发生的事情,而不是你所遇到的困难。至于对
.htaccess
的编辑,您可以签出对
.htaccess
文件进行编辑的其他插件,例如
多功能一体式WP Security&Firewall
。如果我访问example.com/Dustin,它会检查它是用户名还是组,并显示它所在的页面模板文件。但它也需要为创建的多站点工作,因此example.com/SITE/DustinAnyway我们可以通过Skype或其他方式聊天吗?我已经让.htaccess重写工作了,但它无法工作仅适用于我的主站点,而不是网络中的所有站点。这也是我的方向。我想说的是,允许wordpress拥有
.htaccess
的写访问权限,并在生产中应用更改是一种糟糕的做法。一次错误的写入将导致整个站点网络瘫痪。根据服务器配置和第三方插件的使用情况,编辑
.htaccess
可能不合适