内部服务器错误,当 url 有两个文件名



当我从 url 写入两次文件名时,我收到 500 内部服务器错误。

我正在对用户配置文件网址使用以下重写规则:

RewriteRule ^profile/([^/]+)/?$ profile.php?username=$1 [L,QSA,NC]  
RewriteRule ^profile/(followers|friends|saved|stories)/([^/]+)/?$ $1.php?username=$2 [L,QSA,NC]

规则通过此链接正常工作:

https://www.thewebsiteurl.com/profile/username

但是如果我像这样写了两次文件名

https://www.thewebsiteurl.com/profile/profile/username

然后我收到 500 内部服务器错误。

这里有解决这个问题的答案吗?

这是我的HTACCESS代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
ErrorDocument 404 https://www.websiteurl.com/sources/not-found.php          
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} s/+(.+?).php[s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} /index.php [NC]
RewriteRule ^(.*)index.php$ /$1 [L,R=302,NC,NE]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^profile/([^/]+)/?$ profile.php?username=$1 [L,QSA,NC]  
RewriteRule ^profile/(followers|friends|saved|stories)/([^/]+)/?$ $1.php?username=$2 [L,QSA,NC]    

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

<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin '*'
</IfModule>

规则似乎很好,尽管我在某些 Web 服务器中看到%{REQUEST_FILENAME}.php由于文件名解析问题而无法正常工作。

您可以尝试将该规则更改为以下内容:

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

最新更新