我想在我的.htaccess文件创建重写规则执行以下操作:国防部重写删除文件扩展名,添加斜线,删除www和重定向到404,如果没有文件/目录可用
当通过domain.com/abc.php进行访问时:删除文件扩展名,附加斜杠并加载abc.php文件。网址应该是这样的,修改后:domain.com/abc/
当通过domain.com/abc/访问:保留原样的URL和负载abc.php
当通过domain.com访问/ abc:追加尾部斜杠并加载abc.php。网址应该是这样的,修改后:domain.com/abc/
删除WWW
重定向到404页(404.php)当访问网址无法解析为文件夹或文件,例如当访问domain.com/nothingthere.php或domain.com/nothingthere/或domain.com/nothingthere
使某些永久301从旧网址重定向到新网址(例如,domain.com/abc.html到域.COM/ABC /)
所有PHP文件坐在文档根目录,但如果有一个解决方案,将使网址,如domain.com/abc/def/(将加载domain.com/ abc/def.php)也能工作,它也会很好,但并不是必需的
所以这里是我现在所拥有的(从各种来源和样本网络
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
# redirect from www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule^http://%1%{REQUEST_URI} [R=301,L]
# remove php file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]
# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]
# resolve urls to matching php files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ $1.php [L]
有了这个第一四点要求似乎工作,我是否进入domain.com/abc.php,domain.com/abc/或domain.com/abc,最终网址始终最终被加载为domain.com/abc/和domain.com/abc.php。
当我输入一个url解析为不存在的文件时,我收到一个错误310(重定向循环),当真的应该加载404页面。此外,我还没有尝试过,如果子文件夹的工作,但正如我所说,这是低优先级。我非常肯定,我可以在没有任何问题的情况下对传统网址进行永久301重定向,只是想提一提。所以真正的问题是非工作404页面。
您能解释'RewriteCond%{ENV:DOCROOT}/$ 1/index.php -f'中的'$ 1'的含义吗? – Filkor 2012-04-03 00:07:46
执行顺序是:rule.regexp; COND1; cond2; ... rule.substitution。变量'$ 1' ...是正则表达式中的匹配模式,可用于conds。在这种情况下,作为URI的'(。*)'内容不会有任何尾随/。 – TerryE 2012-04-06 16:30:54