1

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

具体来说,我正在尝试/news在我有一个文件的目录上设置 .htaccessshow.php文件。我的目的是转换www.example.com/news/blahblahwww.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 错误。

4

2 回答 2

3

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

您应该能够判断是否删除了<IfModule mod_rewrite.c>and</IfModule>行,然后尝试转到某个页面。如果您收到 500 服务器错误,这意味着 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]
于 2012-12-07T02:03:44.590 回答
1

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

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

RewriteRule ^([a-z0-9_-]+)$ show.php?article=$1 [L,NC]
</IfModule>
于 2012-12-07T04:35:14.847 回答