4

解決済み:

残念ながら、解決策は満足のいくものではありません。今朝、@Wige の提案を試してみたところ、驚いたことに、予想される値が実際にはGETクエリとしてページに送信されていることがわかりました。どうやら、1&1 (この数週間、彼らの環境に変更を加えていることを私は知っています)は、私の問題を魔法のように解決する何かを舞台裏で行いました。


新しい情報: 運用サーバーのApacheバージョンは、私のローカルホスト1.3.34ではvsです。2.2.21

RewriteRule が本番環境で正しく機能しない理由がわかりません。

RewriteRule ^page/pretty-url/(.*)$ page.php?query=$1 [L]

私のローカル テスト環境 ( localhost/mysite/page/pretty-url/{...}) では正常に動作しますが、mysite.com/page/pretty-url/{...}正しく動作しません。期待どおりにロードpage.phpされますが、明らかに?query=$1ピースは無視されます($_GET空です)

問題はサーバーの構成に関係していると思います。httpd.conf にアクセスできない 1&1 共有ホスティング アカウントを使用しています。


それが何をするかRewriteRule(またはすべきか):

のような URL が欲しい

*example.com/page/pretty-url/{{info_for_dynamic_content}}

に書き換えられる

*/page.php?query={{info_for_dynamic_content}}

だから私はアクセスすることができますinfo_for_dynamic_content

の中php$_GET['query']


参照用の完全な .htaccess ファイル:

AddHandler x-mapp-php6 .php

DirectoryIndex index.php
ErrorDocument 404 /index.php 

Options +FollowSymLinks

# per @Jacques Chester's suggestion
Options -MultiViews

RewriteEngine on
RewriteBase /

# the rule in question
RewriteRule ^page/pretty-url/(.*)$ page.php?query=$1 [L]

RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule (.*) /index.php [L]
4

3 に答える 3

1

ほとんどの場合、ホストは変数を別の場所に格納しています。phpinfo();への呼び出しを追加します。スクリプトに挿入し、そこで環境変数を調べて、getにあるはずの値を見つけることができるかどうかを確認します。

于 2012-12-19T13:59:24.583 に答える
0

1&1 のホスティング環境に接続されているようです。

この質問、特にこの回答を参照してください。

基本的に、1&1 は「MultiViews」を有効にしているようです。追加することで

Options -MultiViews

Web サイトでその設定を無効にすると、さまざまなレポートによると、これで問題が解決します。

于 2012-12-18T03:36:39.510 に答える