1and1共享主机上的mod_rewrite

时间:2012-12-07 01:50:54

标签: apache .htaccess mod-rewrite url-rewriting

我正在尝试进行一些URL重写,但我的主机(1and1)以及我对.htaccess文件的一点经验给我带来了麻烦。

具体来说,我正在尝试在/news目录上设置.htaccess文件,其中我有一个show.php文件。我的目的是将www.example.com/news/blahblah转换为www.example.com/news/show.php?article=blahblah

到目前为止我的.htaccess文件是(编辑:更新我的.htaccess,仍然没有解决方案):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^/news/([a-z0-9_-]+)$ /news/show.php?article=$1 [L,NC]
</IfModule>

我已向主持人发送了有关如何启用该模块的详细信息,他们回复说我应输入这些行以启用该模块。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
</IfModule>

我尝试使用RewriteBase,并将其余行添加到文件中,但到目前为止我没有得到任何结果。我是.htaccess编码的新手,所以我对这些命令知之甚少,而且教程似乎没有回答我的问题,所以任何帮助理解我做错了什么都非常感激。

编辑:我更新了文件夹上的.htaccess。我还在根文件夹上载了支持文件,但没有结果。我仍然收到404 Not Found错误。

2 个答案:

答案 0 :(得分:3)

您添加的行不是必需的。似乎可能有几件事可能是问题。未加载mod_rewrite,因此永远不会执行<IfModule>块。或者忽略htaccess文件。

您应该能够判断是否删除了<IfModule mod_rewrite.c></IfModule>行,然后尝试转到某个页面。如果您收到500 Server错误,这意味着未加载mod_rewrite并且服务器正在调整因为无法识别重写语句。否则,你可以尝试在htaccess文件中添加一些乱码,如果你没有任何错误,那么似乎忽略了htaccess文件。

看到您正在共享托管,您需要联系1and1支持。我不知道他们如何运行他们的共享主机,但如果没有加载模块,那么他们需要加载重写模块,如:

LoadModule rewrite_module modules/mod_rewrite.so

否则他们需要使您的文档根目录可以覆盖:

AllowOverride All

以便htaccess文件可以重写URI。


编辑:

  

提到我在根文件夹上没有.htaccess,只是/ news文件夹。

这就是问题所在。您的规则需要更改为:

RewriteBase /news/
RewriteRule ^([a-z0-9_-]+)$ show.php?article=$1 [L,NC]

答案 1 :(得分:1)

找到解决方案。我在根文件夹中上传了一个.htaccess文件,其中只包含支持给我的内容,并且还在新闻文件夹中上传了我自己的.htaccess文件,并且它有效。新闻文件夹的正确.htaccess是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /news/

RewriteRule ^([a-z0-9_-]+)$ show.php?article=$1 [L,NC]
</IfModule>
相关问题