0

我在托管服务器上进行内部重写时遇到问题。这在我的开发和测试服务器上完美运行,但是当 .htaccess 移植到生产共享主机时,内部重写不会发生。

.htaccess 正在读取(验证)带有“重定向”的 RewriteRule 有效,但内部重写无效。浏览器中的 URL 显示正确的友好 URL,但内部重写没有发生,我最终进入主页。

这是重写的一部分:

Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} -f [OR]
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule .* - [L]
RewriteRule ^contact/$                  index.php?pid=3 [QSA,L]

所以我在浏览器中的 URL 将显示 www.mydomain.com/contact/ 但我在主页上。

如果我将 RewriteRule ^contact/$ 更改为 ^contact/$ http://www.mydomain.com/index.php?pid=3我会被重定向,但这不是我想要的。我想要内部重写。

查看日志,我没有收到 404,所以看来我只是在访问目录的基础/根目录。

有任何想法吗??

谢谢!韩吉

更新:收到来自托管服务提供商的电子邮件,称他们不熟悉我的重写“风格”,这就是他们的建议:

RedirectPermanent /contact/ http://www.mydomain.com/index.php?pid=3

嗯……白痴。我希望我们能找出是什么阻止了我的重写工作,这样我就可以用一些东西来回顾它们。我猜这是Apache的配置问题?请帮忙。

4

1 回答 1

0

尝试您的RewriteRule ^contact/$ index.php?pid=3 [QSA,L]规则,我的 Apache 尝试进行内部重定向/full/filesystem/path/to/document/root/index.php,当用作 URL 路径时,它当然不会映射到正确的位置。将目标更改为/index.php?pid=3似乎有效。

于 2012-06-28T16:36:55.543 回答