.htaccess没有在webhost上正确重定向

时间:2015-03-16 14:40:58

标签: php .htaccess

我有一个网站http://alburoojschool.org,这是.htaccess文件:

DirectoryIndex home.php index.php
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule home home.php

RewriteRule ^pages/([^\.]+)$ $1.php
RewriteRule ^news-list/([^\.]+)$ news-list.php?id=$1
RewriteRule ^iq-admin/([^\.]+)$ iq-admin/$1.php
RewriteRule ^news/([0-9]+)/([A-Za-z0-9-]+)/?$ latest-news.php?id=$1&post=$2 [NC,L]
RewriteRule ^events-list/([^\.]+)$ events-list.php?id=$1
RewriteRule ^events/([0-9]+)/([A-Za-z0-9-]+)/?$ upcoming-events.php?id=$1&post=$2 [NC,L]

当我点击http://alburoojschool.org/news-list/1时,它说它是一个重定向循环,但在localhost上工作正常。请帮帮我。

2 个答案:

答案 0 :(得分:1)

您需要将此行放在.htaccess:

之上
Options -MultiViews

MultiViews使用选项Apache's content negotiation modulemod_rewrite之前运行,并使Apache服务器匹配文件扩展名。因此/file可以在网址中,但它会投放/file.php

答案 1 :(得分:0)

我可以看到一些潜在的陷阱,但我认为这是你的主要罪魁祸首。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule home home.php

您可能希望确保home是一个完整的词组并相对于文档根重定向,如下所示:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^home/?$ /home.php

使用你所拥有的内容/news-list/home之类的网址会点击第一个匹配并尝试重定向到/news-list/home.php,我假设它不存在,所以它会尝试重定向(再次)到/news-list/home.php等等。

您应该更新所有重定向,以便它们与docroot相关。