Přepsat pravidlo skrýt rozšíření .htaccess

0

Otázka

Snažím se skrýt rozšíření .php soubor z odkazu

například www.example.com/about.php Zobrazit www.example.com/about

to, co jsem udělal

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L] 

a funguje To perfektně.

ale mám další odkaz, který example.com/news.php?id=45 podle výše uvedeného pravidla, tak se můžu dostat odkaz jako

example.com/news?id=45 without .php

ale chci se schovat id=45 Chci to takhle example.com/news/45

to, co jsem udělal RewriteRule ^news.php?id=([0-9]+) /news/$1 [NC,L]

Ale To nebude fungovat, mám 500 Vnitřní Chyba Serveru

.htaccess apache mod-rewrite php
2021-11-24 04:57:32
1

Nejlepší odpověď

2

Zkuste to takhle:

# MultiViews must be disabled for "/news/45" to work
Options -MultiViews

RewriteEngine on

# Rewrite "/news/45" to "news.php?id=45"
RewriteRule ^news/(\d+)$ news.php?id=$1 [L]

# Handle extensionless ".php" URLs
RewriteCond %{REQUEST_URI} !\.\w{2,3}$
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]

500 Vnitřní chyba Serveru-Chyba byla způsobena tím, že původní směrnice, která "skrýt" .php rozšíření, ne vaše "nové" směrnice (která ve skutečnosti nebyla nic dělat). Původní směrnice by se přepsat žádost o /news/45 k /news/45.php k /news/45.php.php atd. vytvoření přepsat-smyčky (chyba 500).

Viz moje odpověď na následující otázku na ServerFault s podrobným vysvětlením tohoto chování: https://serverfault.com/questions/989333/using-apache-rewrite-rules-in-htaccess-to-remove-html-causing-a-500-error

to, co jsem udělal RewriteRule ^news.php?id=([0-9]+) /news/$1 [NC,L]

Ale To nebude fungovat, mám 500 Vnitřní Chyba Serveru

Logika této směrnice je obrácen a nikdy by skutečně odpovídaly požadované adresy URL (nebo něco na to přijde), tak nebudu dělat nic. Je však syntakticky OK, takže nevyvolá chybu.

500 chyb by došlo jednoduše tím, že žádá /news/45 (s původní směrnice), zda tato směrnice byla v místě, nebo ne.

2021-11-24 11:18:09

OK díky, teď mohu získat přístup ke stránce example.com/news/45 ale CSS nefunguje. @MrWhite
Mohammed Juma

@MohammedJuma Jste pravděpodobně pomocí relativní adresy Url k CSS soubory. Nelze použít relativní adresy Url, pokud jste přepisování více URL-cesta hlubin, tak jak to děláte vy tady. Viz moje odpověď na následující otázku na Webmastery zásobníku: .htaccess rewrite URL vede k chybějící CSS pro více informací o tomto.
MrWhite

díky, bratře, teď to funguje perfektně.
Mohammed Juma

@MohammedJuma Jste vítáni. Jsem aktualizovány moje odpověď s více vysvětlení o nových směrnic a co se děje s vaší původní směrnice a 500 chyb.
MrWhite

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................