.htaccess mod_rewrite 在子目录中不起作用

问题描述 投票:0回答:3

我正在尝试使用 htaccess 重写对我的域的子文件夹中的 main.php 的所有请求。我的 .htaccess 中的代码如下:

RewriteEngine on
RewriteBase /public
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . main.php [L]

我确定该模块已启用,我已使用

apache2ctl -M
命令进行检查

root@vps847:/etc/apache2/sites-available# apache2ctl -M
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 ssl_module (shared)
 status_module (shared)
Syntax OK

在我的默认站点中,我添加/编辑了以下行:

<Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
</Directory>
<Directory /var/www/public>
        AllowOverride All
</Directory>

我每次编辑完一些内容后都会重新启动apache。然而,每次我浏览公共目录时,我都会看到 apache 目录列表。我已经尝试将 .htaccess 添加到我的 apache 的根目录,但它也不起作用。当我向 .htaccess 文件添加错误时,我确实收到了内部服务器错误。

有人能发现我的配置有什么问题吗?我使用的是 Ubuntu 服务器 12.04。

apache .htaccess mod-rewrite ubuntu-12.04
3个回答
7
投票

把这个放在里面

/public/.htaccess

DirectoryIndex main.php

RewriteEngine on
RewriteBase /public/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . main.php [L]

2
投票

我遇到了这个问题,发现有效的解决方案是:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /tools/admin

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /tools/admin/index.php [L]

希望这对某人有帮助


0
投票

我终于设法修复它,并且此组合正在与子文件夹中的“.htaccess”文件一起使用:

Options +FollowSymLinks -MultiViews
DirectoryIndex FormEntries.php

RewriteEngine On
RewriteBase /api/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([a-zA-Z0-9_-]+)/?([0-9]+)?$ /api/$1.php?id=$2 [NC,QSA,L]

所以现在

/api/FormEntries/1
转到
/api/FormEntries.php?id=1
以更用户友好的方式成功显示 API 的输出。

© www.soinside.com 2019 - 2024. All rights reserved.