【发布时间】: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