如何使用别名重写规则?

时间:2011-06-30 11:09:02

标签: apache url mod-rewrite rewrite alias

如果这太长,我会提前道歉。我认为更多的细节比不那么好,希望我不是在漫无边际地漫步: - )

我在笔记本电脑上使用WAMP用于本地开发,我有各种c:/wamp/alias/*文件,每个文件都指向一个项目工作目录。我有一些很棒的mod_rewrite帮助并得到了

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*\/)?ih(\/.*)?$ $1index.php$2 [L,QSA]

对于既适合搜索引擎优化又简短的网址,可以将localhost/.../ih/sub/dir更改为localhost/.../index.php/sub/dir。 [我没有继续这样做,但我怀疑它也能正常工作。]但是,为了完成所有这一切,我不得不将我的文档根目录从c:/wamp/www/更改为c:/,我真的不愿意这样做以防万一我的Apache受到攻击,否则因为它是一个kludge。

我的测试别名文件看起来像

Alias /testme "c:/var/tmp/wamp-testme/"
<Directory "c:/var/tmp/wamp-testme/">
  Options Indexes FollowSymLinks MultiViews
  AllowOverride all
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*\/)?ih(\/.*)?$ $1index.php$2 [L,QSA]
</Directory>

我尝试加载http://localhost/testme/rewrites/ih/sub/path时遇到的错误是

[Thu Jun 30 06:46:13 2011] [error] [client 127.0.0.1]
  File does not exist: C:/wamp/www/var

匹配

Not Found
The requested URL /var/tmp/wamp-testme/rewrites/index.php/sub/path
  was not found on this server.
在浏览器中

。果然,我的c:/wamp/alias/flying.conf文件中指向c:/data/flying/目录的相同配置会在错误日志文件中抛出File does not exist: C:/wamp/www/data,依此类推。

Sooooo ...如果我的机器根目录没有我的doc root,我怎么能有一个超越别名的重写规则?

1 个答案:

答案 0 :(得分:7)

奇怪:尝试在重写规则中添加PT标志:这会强制将重写的URL发送回URL映射引擎。

编辑:尝试在目录上设置RewriteBase