解决了:
不幸的是,该解决方案并不令人满意。今天早上,在尝试@Wige 的建议时,令我惊讶的是,预期值实际上是作为GET
查询发送到页面的。显然,1&1(我知道他们在过去几周一直在改变他们的环境),在幕后做了一些神奇的事情,神奇地解决了我的问题,现在我以前所有不工作的代码都按预期工作。
新信息:生产服务器的Apache版本在我的本地主机上是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
为空)
我想这个问题与服务器配置有关。我使用的是 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]