我的htaccess的重写规则适用于本地主机/ mysite的,但不是在mysite.com 1&1

2019-07-05 10:23发布

解决了:

不幸的是,该解决方案是不令人满意的。 今天上午,试图@ Wige的建议的时候,我才发现,我的惊喜,该预期值INFACT发送到页面作为一个GET查询。 显然,1&1(谁知道我一直在改变他们的环境中,这最后的几个星期),其中没有固定神奇我的问题,现在我所有的先前unworking 代码最初工作预计在幕后的东西。


新的信息 :生产服务器的Apache的版本是1.3.34 VS 2.2.21在我的本地

我无法弄清楚,为什么我重写规则是不是在生产中正常工作。

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]

Answer 1:

最有可能的,你的主机存储变量别的地方。 我想补充调用phpinfo(); 到脚本,并经过环境变量那里看看,如果你能发现本来应该得到的值。



Answer 2:

似乎连接到1&1的主机环境。

看到这个问题 ,尤其是这个答案 。

基本上,它似乎1&1使能“多视图”。 通过增加

Options -MultiViews

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



Answer 3:

我重写规则问题挣扎在1&1 /的1and1 / IONOS共享服务器数周,最终我找到了一个1和1共享服务器的完美设置,像这样开头.htaccess文件

Options -MultiViews
Options +FollowSymlinks
RewriteEngine On
RewriteBase /

我希望这可以帮助别人为1&1是无用的,当谈到htaccess的支持



文章来源: My htaccess RewriteRule works on localhost/mysite but not at mysite.com on a 1&1 shared host