当我从 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]