解决方案并不令人满意。今天早上,在尝试@Wige的建议时,我惊讶地发现,期望值WERE infact作为GET
查询发送到页面。显然,1& 1(我知道他们过去几周一直在改变他们的环境),在幕后做了一些神奇地修复了我的问题的东西,现在我以前所有以前没有工作的代码正在工作正如原先预期的那样。
新信息:生产服务器的 Apache 版本 1.3.34
vs 2.2.21
< / strong>在我的 localhost 上。
我无法弄清楚为什么我的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
为空)
我认为问题与服务器配置有某种关系。我在1&amp; 1共享主机帐户上,没有httpd.conf访问权限。
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]
答案 0 :(得分:1)
最有可能的是,您的主机正在将变量存储在其他位置。我会添加一个对phpinfo()的调用;进入你的脚本并浏览那里的环境变量,看看你是否能找到应该在get中的值。
答案 1 :(得分:0)
似乎已连接到1&amp; 1的托管环境。
See this question,尤其是this answer。
基本上看来1&amp; 1启用“MultiViews”。添加
Options -MultiViews
您为网站禁用该设置,根据各种报告,这可以解决问题。
答案 2 :(得分:0)
我在WEEKS的1&1 / 1and1 / IONOS共享服务器上遇到RewriteRule问题的困扰,最终我找到了1和1共享服务器的理想设置,像这样启动您的.htaccess文件
Options -MultiViews
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
我希望这可以帮助1&1在htaccess支持方面毫无用处的人