0

我有一个奇怪的问题,只发生在我的 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':

本地主机/测试/index2/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,并且这段代码在 index.js 上运行良好。所以问题出在我 MAC 上的默认 apache 上。

谢谢。

4

2 回答 2

1

我不明白这在 Linux 上是如何工作的,或者“工作”的结果是什么。对我来说,它看起来就像人们期望的那样。但是,我认为您RewriteRule可能有点错误。它将做的是将整个传递URIindex.php文件,而我认为您只想在index.php?

如果你输入localhost/test/index/xpto,并假设你的DocumentRoot被设置为/test发送到的字符串index.php将会index.php/exto。同样的事情也适用,index2/exto因为 RewriteRule 不关心您是否输入indexoch 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或您配置的任何内容。

于 2013-09-17T06:33:22.750 回答
0

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

于 2019-05-20T02:35:27.853 回答