我的根目录中有以下.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中的文件扩展名。
答案 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/
修复了我的问题。