如何使用mod_rewrite从.htaccess引用当前目录?

时间:2009-06-12 00:57:35

标签: mod-rewrite

我想使用mod_rewrite制作漂亮的网址,但只有一个版本的.htaccess文件可以用于服务器上的任何用户。

到目前为止,我有标准的漂亮网址.htaccess:

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

理想情况下,我想要类似

的内容
RewriteRule ^(.*)$     %{URL of this file's directory}/index.php/$1 [L]

这份文件会让我相信我想要的并不是必要的:

  
    

注意:每个目录上下文中的模式匹配     永远不要忘记,Pattern会应用于每服务器配置文件中的完整URL。但是,在每个目录的配置文件中,每个目录前缀(对于特定目录始终相同)会自动删除以进行模式匹配,并在替换完成后自动添加。此功能对于许多种重写都是必不可少的 - 如果不这样,您将始终必须匹配父目录,这并非总是可行。

  

但是我仍然得到错误的结果,无论我是否在rewriteRule上放置了index.php的前导/前面。

这,

http://server/test/stream/stream

变成

http://server/index.php/stream

http://server/test/index.php/stream

当.htaccess文件位于/ test /.

2 个答案:

答案 0 :(得分:10)

我遇到了类似的问题,但发现只是从根目录'/'导致我的测试网络服务器(Windows上的xampp)提供类似于以下网址的URL:

  

http://localhost/C:/xampp/htdocs/sites/test/

不完美。我的解决方案是使用RewriteCond从REQUEST_URI中提取路径。以下是从URL末尾删除不需要的“index.php”的示例:

RewriteCond %{REQUEST_URI} ^(.*)/index.php$
RewriteRule index.php %1/ [r=301,L]

注意:百分号符号为“%1 /”,而不是美元符号。

%1-%9获取最后匹配的RewriteCond的模式,$ 1- $ 9获取RewriteRule的模式。

请参阅: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

干杯:)

答案 1 :(得分:3)

事实证明,无论我是否将index.php放在前面/后面都很重要。通过将其关闭,脚本可以正常工作。我一直在测试使用重定向上的物理目录的R标志。