解决:
遗憾的是,该解决方案是不令人满意的。今天早上,在试用@ 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]
什么版本的Apache在你的localhost vs 1&1上运行? –
如果它在你的本地主机上运行,根据你的回答,这个问题不能是mod改写的条件或规则,因为**它们工作。看来你已经解决了所有问题。那么,什么是问题,找出你的规则为什么不能在你的网站工作?如果是这样,我想你应该专门提出这个问题,明确它与你的规则无关,因为它们工作正常。我认为这是'网站管理员'的问题。这只是我的看法,但我希望以任何方式有用。 – PDR
你说得很好。在添加赏金之前,我几乎将此重写为“可能会阻止在另一台服务器上工作的RewriteRule。” - 或者更类似这样的东西。我不认为我有代表迁移问题 - 但我认为你也可能是对的。 –