带有Apache Directory和RewriteRule的通配符?

时间:2012-02-08 23:44:37

标签: unix apache fuelphp

我正在尝试让FuelPHP在我的服务器上运行。我没有权限使用.htaccess文件用于RewriteRule。但是,我的主机允许我指定httpd.conf文件的一部分。

以下适用于我想要的内容:

<Directory /Applications/XAMPP/xamppfiles/htdocs/sandbox/username/public>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>

然而,我需要它不仅仅是“用户名”。 如何在此目录中使用通配符,以便它适用于一次性解决方案的“用户名”的任何值?

我在apache manual上找到了这个建议,但我不确定如何使用RewriteRule

尝试了以下但是没有用:

<Directory /Applications/XAMPP/xamppfiles/htdocs/sandbox/*/public>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>

请帮忙!

2 个答案:

答案 0 :(得分:6)

你接近apache手册:

<Directory /Applications/XAMPP/xamppfiles/htdocs/sandbox/*/public>

<Directory ~ "/Applications/XAMPP/xamppfiles/htdocs/sandbox/.*/public">

答案 1 :(得分:1)

我们发现此消息解决了我们遇到的问题,并未提供真正的解决方案:How to use apache2 mod_rewrite within a Directory directive that uses wildcards?

我们最终使用了以下解决方案:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d

RewriteRule ^(/sandbox/([^/]*)/public/.*)$ /sandbox/$2/public/index.php?$1 [PT,QSA]

必须添加“PT”,因为它通常隐含在目录块中,并告诉它将目标路径视为URI而不是文件路径(由于它没有得到满本地路径)。 QSA标志只是确保您的index.php获得最初提交的所有信息。