许多海报在调试文件中的RewriteRule和RewriteCond语句时遇到问题.htaccess
.其中大多数使用共享托管服务,因此无权访问根服务器配置.他们无法避免使用.htaccess
文件进行重写,并且无法像许多受访者所建议的那样启用RewriteLogLevel.还有许多.htaccess
特定的陷阱和约束都没有得到很好的解决.设置本地测试LAMP堆栈对于大多数人来说需要太多的学习曲线.
所以在这里我的Q是我们怎么会建议他们调试他们的规则本身.我在下面提供一些建议.其他建议将不胜感激.
了解mod_rewrite引擎循环遍历.htaccess
文件.引擎运行此循环:
do
execute server and vhost rewrites (in the Apache Virtual Host Config)
find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled
if found(.htaccess)
execute .htaccess rewrites (in the user's directory)
while rewrite occurred
Run Code Online (Sandbox Code Playgroud)
因此,您的规则将重复执行,如果您更改URI路径,那么它可能最终会执行其他.htaccess
文件(如果存在).因此,请确保终止此循环,必要时添加额外的内容RewriteCond
以停止规则触发..htaccess
除非明确意图使用多级规则集,否则还要删除任何较低级别的重写规则集.
通过针对一组测试模式进行测试,确保每个Regexp的语法都是正确的,以确保它是一个有效的语法,并完成您对各种测试URI的意图.请参阅下面的答案了解更多详情
在测试目录中逐步构建规则. 您可以使用" .htaccess
在路径功能上执行最深的文件"来设置单独的测试目录(树)和调试规则集,而无需搞砸主要规则并停止站点工作.您必须一次添加一个,因为这是将故障本地化为单个规则的唯一方法.
使用虚拟脚本存根转储服务器和环境变量.(参见清单2)如果您的应用程序使用了,blog/index.php
那么您可以将其复制 …
我搜索了Google和StackOverflow试图找到解决方案,但它们似乎都与ASP.NET等有关.
我通常在我的服务器上运行Linux,但是对于这个客户端,我使用Windows与IIS 7.5(和Plesk 10).这就是为什么我对IIS和web.config文件略有不熟悉的原因.在.htaccess
文件中,您可以使用重写条件来检测协议是否为HTTPS并相应地重定向.有没有一种简单的方法可以使用web.config文件实现这一点,甚至使用我安装的" URL Rewrite "模块?
我没有使用ASP.NET的经验,所以如果这涉及到解决方案,那么请包括如何实现的明确步骤.
我使用web.config而不是 PHP 执行此操作的原因是我想在站点内的所有资产上强制使用HTTPS.