Mod重写/清理网址问题

时间:2009-05-04 16:39:34

标签: php drupal

我多年来一直使用drupal 4.7安装,并且最近出现了问题。也就是说,重写的URL现在显示以下字符:?q =在每个drupal生成的URL中,如下所示:http://sitename.com/?q=path/alias,之前的位置为:http://sitename.com/path/alias

我最好猜测为什么会发生这种情况,我最近开始使用一些PHP代码在几个侧面块中添加特定于上下文的链接样式。这是代码:

<?php   $alias= $_GET['q']; ?>

<a <?php $pos=strpos($alias,"1234"); // node number
if(!$pos == false) {
echo 'style="color:black"'; 
} ?> href="internal/link/alias">Internal Link</a>

或者最近:

<?php $path = isset($_GET['q']) ? $_GET['q'] : '<front>';
$alias = url($path, array('absolute' => TRUE)); ?> 

<a <?php $pos=strpos($alias,"internal/link/alias"); 
if(!$pos == false) {
echo 'style="color:black"';
} ?> href="internal/link/alias">Internal Link</a>

这可能是问题吗?如果是这样,任何关于修复的想法?

4 个答案:

答案 0 :(得分:1)

我认为你干净的网址刚好坏了。如果您没有启用干净的网址,那么您的所有网址都会显示为http://example.com/?q=/foo/bar/baz。重写规则会将http://example.com/foo/bar/baz 的请求转换为 http://example.com/?q=/foo/bar/baz,以便在内部进行处理。

您需要返回并确保您的重写规则仍然有效(您甚至可以转到http://example.com/foo/bar/bazz?)并且Drupal已打开干净的网址。

答案 1 :(得分:1)

进入管理员/设置并确保已启用“清除网址”。

答案 2 :(得分:0)

我认为你的代码片段没有引起它。它只从数据库中读取;它不会对URL进行更改。 mod_rewrite仍然启用吗?这可能是由最近更改服务器配置引起的。检查phpinfo()的输出。

顺便说一下,$absolute的选项url()在Drupal 4.7中是passed as a separate argument,而不在$options数组中。你的电话应该是:

url($path, $absolute=TRUE);

答案 3 :(得分:0)

尝试以下方法:

  1. 将未经修改的.htaccess文件再次上传到网站的根目录

  2. 确保您的apache有mod_rewrite可用。如果你有shell访问权限并且它是Ubuntu / Debian机器,那就做吧

    a2enmod重写

  3. 检查是否在admin / settings上启用了该选项

  4. 在根文件夹上创建一个简单的.php文件,然后键入:

    的phpinfo();

  5. 然后看模块是否正常工作。