.htaccess,多个域,非www,强制尾部斜杠,所有重定向到PHP脚本

.htaccess,多个域,非www,强制尾部斜杠,所有重定向到PHP脚本,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,对于一些利他的优步绅士来说,这是一个挑战: 我一直在为我正在开发的一个新网站修改htaccess文件,但就是无法破解它。我让每个部分独立工作,但就是不能让它们一起工作。我正在生成基于PHP请求URI的站点。多个域指向同一目录,因此它必须对多个域起作用。我正在努力实现: 多个域指向同一目录 强制禁止 强制使用尾随斜杠而不扩展,以及 将所有不存在的文件重定向到特定脚本 基本上: ->301显示为->->,但会自动重定向到-> 或 ->301显示为->->以静默方式重定向到-> 或 ->301显示为-

对于一些利他的优步绅士来说,这是一个挑战:

我一直在为我正在开发的一个新网站修改htaccess文件,但就是无法破解它。我让每个部分独立工作,但就是不能让它们一起工作。我正在生成基于PHP请求URI的站点。多个域指向同一目录,因此它必须对多个域起作用。我正在努力实现:

  • 多个域指向同一目录
  • 强制禁止
  • 强制使用尾随斜杠而不扩展,以及
  • 将所有不存在的文件重定向到特定脚本
  • 基本上:

    ->301显示为->->,但会自动重定向到->

    ->301显示为->->以静默方式重定向到->

    ->301显示为->->以静默方式重定向到->

    ->301显示为->->以静默方式重定向到

    到目前为止,我已经使用了以下片段(来自记忆,请原谅我):

    非www:

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
    带尾随斜杠:

    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
    
    所有不存在的脚本:

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^.*/$ ./script.php [L]
    
    我曾经遇到过一些问题,比如某些特定的部分根本不起作用,比如递归效应等等。我不喜欢寻求帮助,我已经尽了最大的努力做我的家庭作业,但我就是想不出这个问题

    我在这里发现了类似的问题,例如:

    非常感谢您的帮助

    更新:

    所以我继续摆弄.htaccess文件。我在问题下方添加了一条评论,大意是我在Firefox的“美妙”地址栏搜索功能上遇到了问题,当域名不是www和非尾随斜杠时,我将域名重定向到搜索。因此,我将方案更改为仍然保持一致(防止重复),但执行相反的操作:强制www和尾部斜杠

    以下代码生成的结果与我要查找的结果相近:

    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /
    
    #Redirect Forcing trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .*[^/]$ /$0/ [L,R=301]
    
    #Redirect non-www to www
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    
    #Redirect to script
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^.*$ script.php [L]
    
    我仍然需要删除不存在文件的扩展名,即:

    www.example.com/cats.html->www.example.com/cats/


    任何建议都意味着世界……

    您的带尾斜杠规则有问题:

    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
    
    再次匹配相同的尾随斜杠,并在重定向中添加另一个斜杠。您的目标需要更改为:

    RewriteRule ^(.*)/$ http://%{HTTP_HOST}/$1 [L,R=301]
    
    这肯定会导致重定向循环。否则,唯一可能存在问题的另一个问题是使用
    %{SCRIPT\u FILENAME}
    而不是
    %{REQUEST\u FILENAME}
    。在大多数情况下,这不应该有什么区别,但第二个可能是你真正想要的:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^.*/$ ./script.php [L]
    

    只要这两个重定向规则在路由到
    script.php
    规则之前,这些规则就不应该相互冲突。在我的空白htaccess文件中,它在香草版apache安装中运行良好。

    @SamanthaP re:您之前的评论。是的,我错过了。它不应该有
    在艾伦有趣的发展。似乎当url同时删除www和尾部斜杠时,它有时在Mozilla Firefox 16.0.1地址栏中无法识别为域。它会自动转发到搜索,而不是检查域。基于此,我认为行动的选择应该是重写,始终包含斜杠和WWW。