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

标签 apache .htaccess mod-rewrite url-rewriting

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

新信息 : 生产服务器的Apache版本是 1.3.34 对比 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 访问权限的 1&1 共享主机帐户上。

那是什么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]

最佳答案

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

关于apache - 我的 htaccess RewriteRule 适用于 localhost/mysite 但不适用于 1&1 共享主机上的 mysite.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897801/

相关文章:

.htaccess - htaccess重写查询字符串

apache - 重写规则以从 Rails 服务器的 URL 隐藏端口?

java - apache HttpClient,基于表单的登录,并检索 HTML 内容

php - 当同时有 500+ 个请求到服务器时,如何在 mysql 中实现并发

Apache Ambari 过时的 PID 错误

php - SSI 或 PHP Include()?

.htaccess - 为什么heroku将 "folder-like"请求通过301重定向到http?

.htaccess - 防止目录访问

apache - 重写多个 URLS

.htaccess - 安全 : Deny access to . hg/* 通过 mod_rewrite