我正在尝试进行一些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错误。答案 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>