Kesalahan Server Internal ketika url memiliki dua nama file

Jun 08 2019

Saya mendapatkan 500 Internal Server Error ketika saya menulis nama file dua kali dari url.

Saya menggunakan RewriteRule berikut untuk url Profil pengguna:

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

Aturan bekerja dengan baik dengan tautan ini:

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

Tetapi jika saya menulis nama file dua kali seperti ini

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

maka saya mendapatkan 500 Internal Server Error.

Apakah ada jawaban untuk mengatasi masalah ini?

Ini kode Penuh HTACCESS saya:

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>

Jawaban

1 anubhava Jun 08 2019 at 10:24

Aturan tampaknya baik-baik saja meskipun saya telah melihat di beberapa server web yang %{REQUEST_FILENAME}.phptidak berfungsi dengan baik karena masalah resolusi nama file.

Bisakah Anda mencoba mengubah aturan itu menjadi ini:

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