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'];

私の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'] が空ではないということです。そして、私がブラウザに入れたURLを示しています。

しかし、ブラウザでこのURLを使用すると:

http://127.0.0.1/test/index/xpto

私の $_GET['key'] は空です

そして、このURLを使用する場合:

http://127.0.0.1/test/anythingbutindex/xpto

$_GET['key'] には次のテキストがあります: anythingbutindex/xpto

MacにXAMPPをインストールしましたが、このコードはインデックスで正常に動作します。したがって、問題は私のMACのデフォルトのApacheにあります。

ありがとう。

4

2 に答える 2

1

これが Linux でどのように機能しているか、または「機能している」という結果がわかりません。私には、期待できることをしているように見えます。しかし、あなたRewriteRuleは少し間違っているかもしれないと思います。それが何をするかというとURI、ファイル全体をindex.phpファイルに渡すことindex.phpです。

を入力すると、送信先の文字列に設定されているlocalhost/test/index/xptoと仮定してになります。ochを入力しても RewriteRule は気にしないため、同じことが当てはまります。DocumentRoot/testindex.phpindex.php/extoindex2/extoindexindex2

これを試すことができます:

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 に答える