URLのファイル名が2倍の場合の内部サーバーエラー

Jun 08 2019

URLから2回ファイル名を書き込んだときに500内部サーバーエラーが発生します。

ユーザープロファイルのURLに次のRewriteRuleを使用しています。

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

しかし、私がこのようにファイル名を2回書いた場合

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>

回答

1 anubhava Jun 08 2019 at 10:24

一部のWebサーバーで%{REQUEST_FILENAME}.phpは、ファイル名解決の問題が原因で正しく機能しないことがありますが、ルールは問題ないように見えます。

そのルールを次のように変更してみてください。

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