报头("位置:&#34);打破.htaccess设置

时间:2014-03-18 16:10:36

标签: php .htaccess

我的根目录中有以下.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

这是删除网址中的.php扩展名(例如www.example.com/about或www.example.com/about/,但仍在加载页面(www.example.com/about.php)。到目前为止,我只需要对我的HTML进行更改就是在每个../href的前面加src

现在我开始在PHP登录脚本的末尾使用以下代码:

header("Location: ../dashboard/");

哪个应该带我去www.example.com/dashboard.php,但会抛出以下错误:

The requested URL /example.com/dashboard.php was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

文件肯定已上传。我的.htaccess是否存在导致header()行为不正确的问题?

修改

如果我将行更改为:

header("Location: ../dashboard.php");

然后它可以工作,但我确实不希望URL中的文件扩展名。

3 个答案:

答案 0 :(得分:1)

更改规则以在重写前检查是否存在.php文件:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^([^/]+)/$ $1.php [L]

RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f [NC]
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php [L]

答案 1 :(得分:0)

在.htaccess文件中尝试此操作

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]
</IfModule>

然后对于标题重定向,只需执行以下操作:

header("location: ../dashboard")

没有结尾斜杠(/).

答案 2 :(得分:0)

我发现了我的问题。这是一个简单的用户错误。

我正在使用的目录并非真正根目录。它是同一帐户托管中的停放域名。所以我实际上在root/example.com/dashboard.php,而.htaccess文件在root/.htaccess。将.htaccess文件的副本复制到root/example.com/修复了我的问题。