调整.htaccess后非首页出现URLNotFound问题求助(123reg主机)
解决伪静态URL 404问题的方案
你遇到的核心问题很明确:只配置了从真实PHP文件到美化URL的外部重定向,但没做反向的内部重写规则——服务器知道把/about.php跳转到/about,但当用户直接访问/about时,它完全不知道该去加载/about.php文件,自然返回404错误。
修正后的.htaccess代码
把你的.htaccess替换成下面的内容,我保留了你原有配置的同时,添加了关键的内部重写规则:
## EXPIRES CACHING ## <IfModule mod_expires.c> # 这里可以按需添加缓存规则(不影响当前404问题),比如: # ExpiresActive On # ExpiresByType text/html "access plus 1 hour" # ExpiresByType text/css "access plus 1 month" </IfModule> ## EXPIRES CACHING ## <IfModule mod_deflate.c> # Compress HTML, CSS, JavaScript, Text, XML and fonts AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript </IfModule> Options +FollowSymLinks RewriteEngine On # 跳转到www子域名 RewriteCond %{HTTP_HOST} ^1ststopcleaning.co.uk$ RewriteRule ^(.*) http://www.1ststopcleaning.co.uk/$1 [QSA,L,R=301] # 外部重定向:把带.php的URL跳转到无后缀的美化URL(可按需添加更多页面) RewriteCond %{THE_REQUEST} \s/+(about|contact|services)\.php[\s?] [NC] RewriteRule ^ %1? [R=302,L] # 内部重写:核心修复!把无后缀的URL映射到对应的PHP文件 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9-]+)$ $1.php [L]
关键细节说明
- 扩展外部重定向规则:我把单一的
about改成了about|contact|services这类多页面匹配(你可以根据实际存在的PHP文件添加更多,比如privacy),避免每个页面都写一条重复规则。 - 新增内部重写规则:这行规则会先检查请求的路径不是真实文件/目录,然后自动把
/xxx映射到/xxx.php,让服务器能找到对应的文件。 - 重定向状态码:测试所有页面跳转和访问都正常后,建议把
R=302改成R=301(永久重定向),对SEO更友好。
内容的提问来源于stack exchange,提问作者Ian Haney
相关产品推荐
相关产品推荐

