我的htaccess RewriteRule适用于localhost / mysite但不适用于1& 1共享主机上的mysite.com

时间:2012-12-16 01:30:16

标签: apache .htaccess mod-rewrite url-rewriting

解决:

不幸的是,

解决方案并不令人满意。今天早上,在尝试@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]

3 个答案:

答案 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支持方面毫无用处的人