Apache 我的htaccess重写规则适用于localhost/mysite,但不适用于1&;上的mysite.com;1共享主机 解决了的:
不幸的是,解决方案并不令人满意。今天早上,当我尝试@Wige的建议时,我惊奇地发现预期值实际上是作为Apache 我的htaccess重写规则适用于localhost/mysite,但不适用于1&;上的mysite.com;1共享主机 解决了的:,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,不幸的是,解决方案并不令人满意。今天早上,当我尝试@Wige的建议时,我惊奇地发现预期值实际上是作为GET查询发送到页面的。显然,1&1(我认识的人在过去几周里一直在对他们的环境进行更改)在幕后做了一些事情,神奇地解决了我的问题,现在我以前所有未工作的代码都按照最初的预期工作。 新信息:在我的本地主机上,生产服务器的Apache版本是1.3.34vs2.2.21 我很难找出我的重写规则在生产中无法正常工作的原因。 RewriteRule^page/pretty url/(.*)$page.ph
GET
查询发送到页面的。显然,1&1(我认识的人在过去几周里一直在对他们的环境进行更改)在幕后做了一些事情,神奇地解决了我的问题,现在我以前所有未工作的代码都按照最初的预期工作。
新信息:在我的本地主机上,生产服务器的Apache版本是
1.3.34
vs2.2.21
我很难找出我的重写规则在生产中无法正常工作的原因。
RewriteRule^page/pretty url/(.*)$page.php?query=$1[L]
在我的本地测试环境(localhost/mysite/page/pretty-url/{…}
)中,它可以正常工作,但在mysite.com/page/pretty-url/{…}
中,它不能正常工作。它按预期加载page.php
,但显然忽略了?query=$1
部分($\u GET
为空)
我认为问题与服务器配置有关。我使用的是1&1共享主机帐户,没有httpd.conf访问权限
重写规则所做的(或应该做的):
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]
我想要像这样的网址
*example.com/page/pretty url/{{info\u for\u dynamic\u content}}
改写
*/page.php?query={{info\u for\u dynamic\u content}}
因此,我可以访问动态内容的信息
在php
as$\u 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]
似乎已连接到1&1的托管环境 ,特别是 基本上,似乎1和1启用了“多视图”。加入
Options -MultiViews
您可以为您的网站禁用该设置,根据各种报告,这可以解决问题。最有可能的情况是,您的主机正在其他地方存储变量。我将添加对phpinfo()的调用;进入您的脚本并查看其中的环境变量,看看是否可以找到get中应该包含的值。我在1&1/1和1/IONOS共享服务器上苦苦挣扎了数周,最终找到了1和1共享服务器的完美设置,请像这样启动.htaccess文件
Options -MultiViews
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
我希望这对某些人有所帮助,因为在htaccess支持方面,1和1是无用的什么版本的Apache在本地主机上运行,而不是1和1?根据您的回答,如果它在本地主机上运行,那么问题不可能是mod rewrite条件或规则,因为它们是有效的。看来你已经全部解决了。那么,问题是什么,找出为什么你的规则在你的网站上不起作用?如果是这样的话,我想你应该明确地问这个问题,说明这与你的规则无关,因为它们很好用。我认为这是
网站管理员的问题。这只是我的意见,但我希望在任何方面都是有用的。你的观点很好。在添加悬赏之前,我几乎将其改写为“什么可以阻止在一台服务器上工作的重写规则在另一台服务器上工作?”——或者更一般化的类似内容。我不认为我有资格回答一个问题,但我认为你也可能是对的。@JasonMcCreary我稍后会检查一下。我花了几分钟查看(在phpinfo()
中),但不容易确定版本。phpinfo()
将其列在最上面或最下面。不记得了。它应该在那里。我昨晚很快尝试了这个,但它似乎没有解决我的问题。。。但是我只有几分钟的时间玩它,直到今天晚些时候才能攻击它。这里,我有一些观点,哈哈。1&1显然解决了我的问题,但他们肯定不会得到我的赏金。我投票结束我的问题,因为它太本地化了。