You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让含子域名的所有页面URL在浏览器中显示为.asp而非.php?

问题:让通配符子域名下的.php页面URL在地址栏显示为.asp

我持有site.com域名及通配符子域名,所有页面均为.php扩展名。需求是:当在浏览器中打开如sub.site.com/page.php这类链接时,地址栏要显示为sub.site.com/page.asp。所有子域名对应独立子目录,我的site.com.conf配置文件中有如下配置行:
VirtualDocumentRoot /var/www/site.com/public_html/%1/

我尝试过多种.htaccess配置方案均无效,以下是两种无效的配置示例:

第一种无效配置

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)\.asp$ $1.php [L]

第二种无效配置

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(.+)\.site\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)\.asp$ $1.php [L]

解决方案

你需要同时配置外部重定向(修改地址栏显示)和内部映射(后台执行PHP文件)两条规则,且避免重复启用RewriteEngine。以下是可生效的.htaccess配置:

RewriteEngine On
RewriteBase /

# 移除www前缀
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# 外部重定向:将.php请求跳转至.asp,更新地址栏
RewriteCond %{THE_REQUEST} \s/+(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1.asp [R=301,L,NE]

# 内部映射:将.asp请求转发至对应.php文件处理
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.php -f
RewriteRule ^(.*)\.asp$ $1.php [L]

规则说明

  1. 外部重定向规则通过%{THE_REQUEST}匹配原始请求,避免内部映射时触发循环,确保只有用户直接访问.php链接时才会跳转。
  2. NE标记防止URL中的特殊字符被不必要编码。
  3. 内部映射规则通过%{DOCUMENT_ROOT}适配子域名对应的子目录,确保能正确找到对应的.php文件。

额外注意

  • 确认Apache服务器已启用mod_rewrite模块。
  • 若子域名目录有独立的.htaccess,将上述配置放置到对应目录中即可;若使用主目录的.htaccess,VirtualDocumentRoot的配置会自动适配子目录路径。

内容的提问来源于stack exchange,提问作者rhje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:24:54