4

解决了:

不幸的是,该解决方案并不令人满意。今天早上,在尝试@Wige 的建议时,令我惊讶的是,预期值实际上是作为GET查询发送到页面的。显然,1&1(我知道他们在过去几周一直在改变他们的环境),在幕后做了一些神奇的事情,神奇地解决了我的问题,现在我以前所有不工作的代码按预期工作。


新信息:生产服务器的Apache版本在我的本地主机上是1.3.34vs。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为空)

我想这个问题与服务器配置有关。我使用的是 1&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]
4

3 回答 3

1

很可能,您的主机将变量存储在其他地方。我会添加一个调用 phpinfo(); 进入你的脚本并检查那里的环境变量,看看你是否能找到应该在 get 中的值。

于 2012-12-19T13:59:24.583 回答
0

似乎连接到 1&1 的托管环境。

看到这个问题,特别是这个答案

基本上,1&1 似乎启用了“MultiViews”。通过添加

Options -MultiViews

您为您的网站禁用该设置,根据各种报告,这可以解决问题。

于 2012-12-18T03:36:39.510 回答
0

我在 WEEKS 的 1&1 / 1and1 / IONOS 共享服务器上遇到了 RewriteRule 问题,最终我找到了 1 和 1 共享服务器的完美设置,像这样启动你的 .htaccess 文件

Options -MultiViews
Options +FollowSymlinks
RewriteEngine On
RewriteBase /

我希望这对某人有所帮助,因为 1&1 在 htaccess 支持方面毫无用处

于 2019-03-24T15:36:36.273 回答