【问题标题】:My htaccess RewriteRule works on localhost/mysite but not at mysite.com on a 1&1 shared host我的 htaccess RewriteRule 可以在 localhost/mysite 上工作,但不能在 1&1 共享主机上的 mysite.com 上工作
【发布时间】:2019-03-24 23:36:36
【问题描述】:

已解决:

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


新信息:生产服务器的 Apache 版本是 1.3.34 vs 2.2.21 on我的 本地主机

我无法弄清楚为什么我的 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]

【问题讨论】:

  • 什么版本的 Apache 在你的 localhost vs 1&1 上运行?
  • 根据您的回答,如果它在您的 localhost 中有效,则问题不可能是 mod-rewrite 条件或规则,因为 它们有效。看来你已经解决了一切。 ¿ 那么,问题是什么,找出为什么您的规则在您的站点中不起作用?如果是这样,我想你应该专门问这个问题,明确它与你的规则无关,因为它们工作正常。我认为这是webmasters 的问题。这只是我的意见,但我希望在任何方面都有用。
  • 你说得很好。在添加赏金之前,我几乎将其改写为“可以防止在一台服务器上运行的 RewriteRule 在另一台服务器上运行的原因”。 - 或者类似的更概括的东西。我不认为我有代表迁移问题 - 但我认为你也可能是对的。
  • @JasonMcCreary 我稍后会检查。我花了几分钟查看(phpinfo()),但无法轻易确定版本。
  • phpinfo() 将其列在最顶部或最底部。不记得了。它应该在那里。

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


【解决方案1】:

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

【讨论】:

  • 这里,有几点,大声笑。 1&1 显然解决了我的问题,但他们肯定不会得到我的赏金。我投票结束我的问题,因为我的问题过于本地化。
【解决方案2】:

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

See this question,尤其是this answer

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

Options -MultiViews

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

【讨论】:

  • 昨晚我很快尝试了这个,它似乎没有解决我的问题......但我只有几分钟的时间来玩它,直到无法攻击它今天晚些时候。
【解决方案3】:

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

Options -MultiViews
Options +FollowSymlinks
RewriteEngine On
RewriteBase /

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

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 2018-02-10
    • 2017-12-12
    • 2021-06-11
    • 2018-12-21
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多