.HTACCESS 重定向问题

.HTACCESS re-direct issues

我遇到了一个问题,在我使用 .htaccess 重写规则从我的 URL 中删除 .php 扩展名后,我无法再访问下一级目录。

例如。如果我导航到 www.gameandshame.com/register.php 它将重定向到 www.gameandshame.com/register 但是,当我使用 link 退出时

www.gameandshame.com/auth/login.php 它重新写入 www.gameandshame.com/auth/login 但是它会产生 404 错误,登录和注销文件位于 auth 文件夹内,这非常重要我保持我的网站文件正确排序所以我不想将它们拉到我的主目录。

有人知道他们为什么会产生 404 错误吗?

RewriteEngine On
RewriteCond %{HTTP_HOST} ^gameandshame.com [NC]
RewriteRule ^(.*)$ http://www.gameandshame.com/ [L,R=301]

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://www.gameandshame.com/ [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://www.gameandshame.com/ [R=301,L]


# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ .php [L]


#Handle Profile Re-directs
RewriteRule ^profile/?$ profile.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profile/(.*)/?$ profile.php?u= [NC,L]

#Handle Post re-directs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^post/?$ post.php [NC,L]
RewriteRule ^post/(.*)/?$ post.php?postid= [NC,L]

在 root .htaccess 中有这些规则:

Options -MultiViews
RewriteEngine On

RewriteCond %{HTTP_HOST} ^gameandshame\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://www.gameandshame.com/ [R=301,L,NE]

## hide .php extension
# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^profile/(.+)/?$ profile.php?u= [NC,L,QSA]

#Handle Post re-directs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^post/(.+)/?$ post.php?postid= [NC,L,QSA]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/\.php -f [NC]
RewriteRule ^(.+?)/?$ /.php [L]