多个重写规则导致内部服务器错误

forcing this to work makes my kind of crazy so i hope you can help.

I use Rewrite Rules and .htaccess to make my dynamic URL

example.com/page.php?id=1 

look like this

example.com/1

using

RewriteRule    ^([A-Za-z0-9-]+)/?$    page.php?id=$1    [NC,L] 

, and it works perfectly fine so far.
But i also want to hide the filetype in the URL ( impressum.php to impressum) using

RewriteRule (.*) $1.php [L]

So both Rules are working completely correct as long as i dont use them both at the same time. When i do so, which looks like this (my complete file)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]
RewriteRule ^([A-Za-z0-9-]+)/?$    page.php?id=$1    [NC,L] 

,i get an Internal Server Error. I tried different versions, for example change the positions and so on, but i allways get this error.

So my question is: how do i get both rules together and working, while the URL ending is still hidden and the example.com/1 works too?

Thank you very much for any answer

You can use the following in your .htaccess file:

RewriteEngine on

# Check if the PHP file exists and route accordingly
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

# If not, pass the request to page.php if it contains A-Za-z0-9-
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z0-9-]+)/?$    page.php?id=$1    [NC,L] 

You need two separate rules. Rewrite conditions will only get applied to the immediately following rule and with your php extension rule, you must check that the php file exists before adding the php to the end:

RewriteEngine on

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9-]+)/?$    page.php?id=$1    [NC,L]