RewriteRule规则本地正常服务器失效,URL伪静态异常如何解决
解决RewriteRule服务器端不生成友好URL的问题
以下是几种常见原因和对应的解决办法:
Apache rewrite模块未启用
服务器大概率没开启rewrite模块,先执行命令启用:a2enmod rewrite systemctl restart apache2接着检查站点配置文件(比如
/etc/apache2/sites-available/your-site.conf),在对应<Directory>块里设置AllowOverride All,否则根目录的.htaccess规则不会生效,改完记得重启Apache。.htaccess文件出问题
确认服务器上的.htaccess放在网站根目录,权限设为644(保证Apache能读取),同时服务器配置允许使用.htaccess文件(上面的AllowOverride All也管这个)。规则缺少必要判断或标记
现有规则没排除真实存在的文件/目录,而且只是内部转发,容易导致地址栏显示参数URL。改成下面的完整规则试试:RewriteEngine On # 跳过真实存在的文件和目录,避免静态资源被重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]要是需要强制浏览器地址栏跳转到友好URL,再加
R=301(永久重定向)标记,适合已经上线的站点:RewriteRule ^(.*)$ index.php?url=$1 [QSA,L,R=301]服务器是Nginx而非Apache
Nginx不支持.htaccess,得把规则转换成Nginx的语法,在站点配置里加:location / { try_files $uri $uri/ /index.php?url=$uri; }改完重启Nginx服务。
内容的提问来源于stack exchange,提问作者nitroflox
相关产品推荐
相关产品推荐

