解決済み:
残念ながら、解決策は満足のいくものではありません。今朝、@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]