PHP允许修改当前文件夹中的.htaccess文件吗?

我有一个位于共享主机上的PHPnetworking应用程序。 我的目标是在PHP页面运行时从PHP代码中修改.htaccess文件。 我需要.htaccess插入一些mod_rewrite行到它。

问题是,在Windows + Apache上,我可以dynamic修改.htaccess文件,但是当我尝试以任何方式访问这个文件(复制或打开)时,Linux上相同的代码报告了一个问题:

"failed to open stream: Permission denied"

我给了.htaccess文件777权限 – 仍然没有结果。 什么阻止我这样做? 我如何开发一个解决方法?

PS我最初的目标是能够添加一个新的RewriteRule到.htaccess映射新的category_id与新的category_name。

如果它不是共享主机,我会使用像RewriteMap(在主Apacheconfiguration),并将能够访问地图文件。

这是我用PHP + Apache无法解决的第一个真正的限制,但是我希望这也是可以避免的。

我想建议其他的东西也可以。 为什么不为每一个“特殊”的网址写一条规则呢?

我发现使用WordPress的用法变得简单很多:每个URL都被重定向到索引。

你所要做的就是设置索引文件,读入被加载的目录(也许使用$ _SERVER ['URI_REQUEST'])并处理它。

添加到.htaccess这个:

 <Ifmodulee mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </Ifmodulee> 

多亏了这个chunck,你有一个系统在某种程度上是无限的。 如果您想重命名类别URL,或者添加其他特例,则已经准备就绪!

这似乎是一个过于复杂的解决方案,只是有一个通用的“加载类别”页面,从URL中取得类别名称并加载相应的ID。

例如,如果URL是:

 http://yoursite.com/category/programming 

我会重映像这样的:

 http://yoursite.com/category.php?name=programming 

你只需要一小部分重写规则。 要做乍得的建议:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/category/.*$ category.php [QSA] 

因此,任何时候有人导航到/category/category_id ,请求将被引导到category.php ,这将被交给$_SERVER['REQUEST_URI']/category/ URI,从中你可以很容易地获得类别ID,每次添加类别时,不需要费心编辑.htaccess文件。

虽然我同意上面的意见,但绝对可以做到。 像WordPress这样的PHP应用程序正是基于设置页面所做的更改来完成的。 它应该像写入文件一样简单,但是父目录NEEDS要有Web服务器用户写入的权限。

如果它没有为你工作的技巧将使父目录777或775,并将组设置为Apache下运行的任何组(通常是“apache”或“www”或类似的东西)

亚当(评论你的问题)是非常正确的,但你的服务器上的其他安全层可能会阻止你这样做,这可能是一个很好的迹象表明,你可能正在接近错误的方式。

我同意乍得桦树。 如果你不能劝阻,但在你的情况下,我会首先寻找具有锁定权限的父目录。

仅供参考,重写.htaccess的原因之一是一个坏主意,因为在.htaccess正在被重写的任何请求将不会被应用任何重定向。