删除扩展名后,如果文件不存在,则发送到特定页面
After extension is removed, if file doesn't exist, send to a particular page
我的问题与 有点相似,但不完全相同,我无法充分理解它以适应我的需要。
我有这个 htaccess 规则来删除文件扩展名,效果很好
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ .php [NC,L]
所以/somepage
指的是/somepage.php
。我现在需要一种回退方式,以防 somepage.php
不存在。
在这种情况下 /somepage
将重写为可以处理请求的 /catchall.php?link=somepage
。我该怎么做?
您当前的规则是盲目添加 .php
扩展名,而不检查是否存在匹配的 .php
文件。您可以调整规则以检查是否存在 .php
文件,然后仅添加 .php
。当匹配的 .php
文件不存在时,我们可以重写为 /catchall.php
.
RewriteEngine On
# add .php extension only if a matching .php file exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ .php [L]
# If URI is still not pointing to a valid file/directory
# then rewrite to /catchall.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ catchall.php?link=[=10=] [L,QSA]
我的问题与
我有这个 htaccess 规则来删除文件扩展名,效果很好
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ .php [NC,L]
所以/somepage
指的是/somepage.php
。我现在需要一种回退方式,以防 somepage.php
不存在。
在这种情况下 /somepage
将重写为可以处理请求的 /catchall.php?link=somepage
。我该怎么做?
您当前的规则是盲目添加 .php
扩展名,而不检查是否存在匹配的 .php
文件。您可以调整规则以检查是否存在 .php
文件,然后仅添加 .php
。当匹配的 .php
文件不存在时,我们可以重写为 /catchall.php
.
RewriteEngine On
# add .php extension only if a matching .php file exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ .php [L]
# If URI is still not pointing to a valid file/directory
# then rewrite to /catchall.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ catchall.php?link=[=10=] [L,QSA]