【问题标题】:.htaccess mod_rewrite for web service as well as hide other files.htaccess mod_rewrite 用于 Web 服务以及隐藏其他文件
【发布时间】:2011-06-01 18:34:32
【问题描述】:

我想我知道如何隐藏文件,但是如何使用 mod_rewrite 只允许在同一目录中调用 Web 服务?

这是目录/文件结构

/var/www/html/xmlrpc/xmlrpc.server.php
/var/www/html/xmlrpc/xmlrpc.client.php
/var/www/html/xmlrpc/xmlrpc.class.php
/var/www/html/xmlrpc/xmlrpc.ini
/var/www/html/xmlrpc/logs

重要提示:/var/www/html/xmlrpc/logs 有 777 权限 在你开始攻击我之前,我计划将其移至非公共目录并授予正确的权限。但有人问我是否可以用 .htaccess 文件隐藏它。

.htaccess

AuthType Basic
AuthName "My hidden files"
AuthBasicProvider file
AuthUserFile /var/www/html/xmlrpc/.pswds
Require valid-user

.pswds

user:5/abcde1abcdE

我也是 mod_rewite/mod_alias 的新手,需要这个 URL:

http://127.0.0.1/xmlrpc/xmlrpc.server.php

变成这样:

http://127.0.0.1/xmlrpc/v1/

如何做到这一点?

还知道在 Apache 中的虚拟主机设置上,您可以设置日志文件路径/名称,这也可以从 .htaccess 文件中完成吗?

欢迎提供示例,因为这对我来说也是一种学习体验。

【问题讨论】:

    标签: linux web-services .htaccess mod-rewrite apache2


    【解决方案1】:

    啊 mod_rewrite。在 xmlrpc 目录中试试这个:

    RewriteEngine On
    RewriteRule ^v1/$ xmlrpc.server.php [L]
    

    尽管有一些问题 - xmlrpc.server.php 是否接受任何获取参数?你能保证网址总是包含一个斜杠吗?

    要强制使用尾部斜杠以及其他一些东西,试试这个:

    # Allows direct linking to files
    RewriteCond %{REQUEST_FILENAME} !-f
    
    #Checks if the url is missing a slash, if so, evaluate rule below
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ http://127.0.0.1/$1/ [L,R=301]
    

    必须根据您放置 .htaccess 文件的位置来调整最后一条规则。如果它位于根目录,那么它将适用于所有较低的目录。如果它在 xmlrpc 文件夹中,那么您可以不使用 localhost。

    还要记住限制对 .htaccess 文件的访问:

    <Files .htaccess>
        order allow,deny
        deny from all
    </Files>
    

    其他问题必须由其他人回答 - 对此并不熟悉。

    【讨论】:

    • 几个问题:XMLRPC 脚本确实接受参数,但只使用 XMLRPC 服务而不是来自 URL,这有关系吗?我还以本地主机为例,生产 URL 类似于:site/xmlrpc/service/server.php 我想我明白如何为此进行更改。限制 .htaccess 文件的最后一个注意事项,这是可用的默认站点吗?
    • 1) 我相信参数应该没问题。 2) 尾部斜杠检查很容易更改 - 只需将本地主机换成您的生产主机。 3)至于限制.htaccess,我不太确定你的问题是什么。该示例是一个文件限制 - 阻止 Web 浏览器打开 .htaccess 文件。
    • 对公众隐藏其他文件,但只能访问 xmlrpc.server.php
    • 最简单的方法是将其他文件放在网络空间之外 - 只将 xmlrpc.server.php 文件留在公共空间中。如果它们绝对必须都在同一个系统目录中,您可以通过将它们全部放在公共空间之外来解决这个问题,然后只需在公共文件夹中使用符号链接即可。 (/home/user/public_html/xmlrpc/xmlrpc.server.php -> /home/user/xmlrpc/xmlrpc.server.php)。 PHP 包括系统路径,而不是 url,所以这些都应该工作。
    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多