2012-12-16 33 views
4

解决:

遗憾的是,该解决方案是不令人满意的。今天早上,在试用@ Wige的建议时,我惊奇地发现,期望值事实上发送到页面,作为GET查询。显然,我认识的人过去几周一直在改变他们的环境,在幕后做了一些奇迹般地解决了我的问题的场景,现在我以前的非工作代码按照最初的预期工作。我htaccess的重写规则适用于本地主机/ mysite的,但不是在mysite.com在1&1共享主机


新信息:本阿帕奇版的生产服务器是在我的本地主机1.3.34 VS 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访问的共享主机帐户。


RewriteRule能做什么(或应该做):

我要像

* example.com/page/pretty-url/{{info_for_dynamic_content}}

的URL改写为

* /page.php?query={{info_for_dynamic_content}}

所以我可以在php$_GET['query']


全面进入info_for_dynamic_content

。参考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

什么版本的Apache在你的localhost vs 1&1上运行? –

+1

如果它在你的本地主机上运行,​​根据你的回答,这个问题不能是mod改写的条件或规则,因为**它们工作。看来你已经解决了所有问题。那么,什么是问题,找出你的规则为什么不能在你的网站工作?如果是这样,我想你应该专门提出这个问题,明确它与你的规则无关,因为它们工作正常。我认为这是'网站管理员'的问题。这只是我的看法,但我希望以任何方式有用。 – PDR

+0

你说得很好。在添加赏金之前,我几乎将此重写为“可能会阻止在另一台服务器上工作的RewriteRule。” - 或者更类似这样的东西。我不认为我有代表迁移问题 - 但我认为你也可能是对的。 –

回答

0

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

See this question,特别是this answer

基本上看起来1启用“MultiViews”。通过添加

Options -MultiViews 

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

+0

I昨天晚上很快试了一下,似乎没有解决我的问题......但我只有几分钟的时间来玩它,直到今天晚些时候才能够攻击它。 –

+0

是啊,不能使这项工作... –

+0

呃... ... drat:/ –

1

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

+0

在这里,有一些观点,大声笑1&1显然解决了我的问题,但他们肯定,因为heck没有开始我的赏金。太局部化了。 –

相关问题