apache在Mac Lion上的RewriteEngine上没有使用索引

时间:2013-09-17 01:49:49

标签: macos apache mod-rewrite

我有一个奇怪的问题,只发生在我的Mac上(我不尝试使用另一台mac,但确实尝试过在linux上运行)

这是我的.htaccess

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?key=$1

在我的index.php上我把:

echo $_GET['url'];

如果我的网址是这样的话,它会返回一个空数组:

本地主机/测试/索引/ xpto

但如果我把它放在url中,则返回'index2 / xpto':

本地主机/测试/索引2 / xpto

问题在于字符串索引。

你们知道为什么它不能在我的Mac上运行但是在Linux上运行吗?

我在mac os x lion上使用标准的apache。 我只是在httpd.conf

上更改了这一行
<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
</Directory>
....
<Directory "/Library/WebServer/Documents">
    AllowOverride All
    ...

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

被修改

通过工作我的意思是$ _GET ['key']不是空的。并显示我放入浏览器的网址。

但是当我在浏览器上使用此网址时:

http://127.0.0.1/test/index/xpto

我的$ _GET ['key']为空

如果我使用这个网址:

http://127.0.0.1/test/anythingbutindex/xpto

$ _GET ['key']有文字:     anythingbutindex / xpto

我确实在我的mac上安装了XAMPP,这段代码可以正常使用索引。 所以问题在于MAC上的默认apache。

感谢。

2 个答案:

答案 0 :(得分:1)

我不明白这是如何在Linux上运行的,或者是什么结果“正在工作”。对我来说,看起来它正在做着人们所期待的。但是我觉得你的RewriteRule可能有点不对劲。它会做什么,它会将整个URI传递给index.php文件,而我认为您只想在index.php之后使用参数?

如果您输入localhost/test/index/xpto,并假设DocumentRoot设置为/test,则发送至index.php的字符串将为index.php/exto。同样的事情也适用于index2/exto,因为RewriteRule并不关心您是否输入index och index2

你可以试试这个:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^index/(.*)$ index.php?key=$1

如果您确实需要index参数,可以将RewriteRule更改为:

RewriteRule ^(index/)(.*)$ index.php?key=$1$2

希望它可以帮助你前进。

修改

澄清之后,我理解了这个问题。稍后进行了一些测试我发现解决方案非常明显,但我一开始并没有发现它。 RewriteRule略有偏差,如果我使用它,几乎在我的系统上工作。

RewriteRule ^(.*)$ /index.php?key=$1 [L]

注意/之前的index.php。但是,这总是会重定向到index.php,这意味着始终与RewriteCond语句匹配。将语句更改为此可用于我的系统。

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

如果您设置了DirectoryIndex !-d,那么<path>/index.html就是多余的,因为它总会尝试{{1}}或您配置的任何内容。

答案 1 :(得分:0)

我现在遇到了这个问题,最简单的方法是通过自制软件重新安装apache,因此它的工作方式与我在VPS上使用的Linux相同。 重新安装,重新配置端口大约花了两分钟,我使用了virutalhost.sh脚本指向〜/ Sites文件夹