我有网站(mzadkm.com)尝试重写规则短网址到app.php页。因此,如果用户浏览“mzadkm.com/app“,将显示“mzadkm.com/app.php“页面
RewriteRule ^/app /app.php [L,R=301]
它的工作在电脑上,但在移动的浏览器给予我404页有什么想法吗
dojqjjoe1#
这可能就是您要寻找的内容:
RewriteRule ^/?app /app.php [L]
文档中明确指出,如果在一个 distributed 配置文件中实现了RewriteRule get中的模式,则该模式将应用于请求的 relative 路径。这意味着您实际上希望在此处匹配路径app而 not/app。这就是为什么您的规则没有被应用。^/?app是一个接受 both 路径表示法的变体,relative和absolut,这意味着相同的规则可以在中央配置中实现,也可以在分布式配置文件(“.htaccess”)中实现。我还冒昧地删除了你显示的外部重定向(“R=301”),因为根据你问题的措辞,这很可能不是你想要的。相反,你想要一个“内部重写”。但是,你需要注意不要实现重写循环,这将导致请求失败和“内部服务器错误”(http状态500)。一种方法是:
RewriteRule
app
/app
^/?app
RewriteEngine on RewriteRule ^/?app$ /app.php [L]
这里又有一条:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/?app /app.php [L]
为什么在你的电脑上看起来一切正常,而在移动的浏览器上却不一样,这一点还不清楚。既然应用了相同的规则,请求看起来也一样,那么一定有其他原因。我怀疑你在某个地方查看了之前尝试的缓存结果。记住,在测试时 * 总是 * 使用一个新的匿名浏览器窗口。并检查你在浏览器网络控制台内收到的响应。
1条答案
按热度按时间dojqjjoe1#
这可能就是您要寻找的内容:
文档中明确指出,如果在一个 distributed 配置文件中实现了
RewriteRule
get中的模式,则该模式将应用于请求的 relative 路径。这意味着您实际上希望在此处匹配路径app
而 not/app
。这就是为什么您的规则没有被应用。^/?app
是一个接受 both 路径表示法的变体,relative和absolut,这意味着相同的规则可以在中央配置中实现,也可以在分布式配置文件(“.htaccess”)中实现。我还冒昧地删除了你显示的外部重定向(“R=301”),因为根据你问题的措辞,这很可能不是你想要的。相反,你想要一个“内部重写”。
但是,你需要注意不要实现重写循环,这将导致请求失败和“内部服务器错误”(http状态500)。
一种方法是:
这里又有一条:
为什么在你的电脑上看起来一切正常,而在移动的浏览器上却不一样,这一点还不清楚。既然应用了相同的规则,请求看起来也一样,那么一定有其他原因。我怀疑你在某个地方查看了之前尝试的缓存结果。记住,在测试时 * 总是 * 使用一个新的匿名浏览器窗口。并检查你在浏览器网络控制台内收到的响应。