解决了:
不幸的是,该解决方案并不令人满意。今天早上,在尝试@Wige 的建议时,令我惊讶的是,我发现预期值实际上以 GET
的形式发送到页面上。询问。显然,1&1(我知道他们在过去几周一直在改变他们的环境)在幕后做了一些神奇的事情,解决了我的问题,现在我之前所有无法正常工作的代码都按原先预期的那样工作。
新信息 : 生产服务器的Apache版本是 1.3.34
对比 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
做(或应该做):我想要像这样的网址
*
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]
最佳答案
最有可能的是,您的主机将变量存储在其他地方。我会添加对 phpinfo() 的调用;进入您的脚本并查看那里的环境变量,看看您是否可以找到应该在 get 中的值。
关于apache - 我的 htaccess RewriteRule 适用于 localhost/mysite 但不适用于 1&1 共享主机上的 mysite.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897801/