0

我有一个这样的 VirtualHost 设置:

Alias /somedir /some/other/dir

http://example.com/somedir工作正常

但是,我需要设置mod_rewrite/somedir(我想要干净 URL 的 CodeIgniter 应用程序)。这是来自 CodeIgniter wiki 的部分内容:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

通常,mod_rewrite在子目录中使用 when 更改RewriteBase以匹配目录的名称就足以使其工作:

RewriteBase /somedir

...但它似乎不适用于mod_alias(获得 404)。这个问题有解决方法吗?

4

2 回答 2

0

以下在我的测试服务器上工作,所以尝试这可能会解决你的问题..

在您的虚拟主机中:

Alias /somedir /some/other/dir

RewriteEngine On

# I think these conditions should work correctly; the other ones shouldn't
# because the alias has not been applied at this stage of processing yet
RewriteCond /some/other/dir%{REQUEST_URI} !-d
RewriteCond /some/other/dir%{REQUEST_URI} !-f
# L is unnecessary in this context, but be sure to PT so mod_alias picks up
# on the rewrite
RewriteRule ^/somedir/(.*)$ /somedir/index.php/$1 [PT]
于 2010-07-25T21:35:52.740 回答
0

虽然我没有测试你的样本,但在我自己的配置中,我在使用 PT 标志方面并没有取得太大的成功,这可能是因为与我的配置中的重写规则交互。

我发现将别名的使用限制为重写条件更容易,并且始终在重写输出中使用文件系统路径。

Define SOME_DIR = "/somedir"
Define SOME_OTHER_PATH = "/some/other/dir"

Alias "${SOME_DIR}" "${SOME_OTHER_PATH}"

RewriteEngine On
RewriteCond ${SOME_DIR}%{REQUEST_URI} !-d
RewriteCond ${SOME_DIR}%{REQUEST_URI} !-f

RewriteRule ^${SOME_DIR}/(.*)$ ${SOME_OTHER_PATH}/index.php/$1 [NC,QSA,L]
于 2016-02-18T23:07:54.600 回答