我花了一些时间尝试使用不同的方法为我的网址添加尾部斜杠,例如:
在我的生产网站上,这可以正常使用此规则:
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ /$1$2/ [R=301,L]
但它不适用于我的本地开发设置。我在localhost:9090
运行本地网站,因此当我转到localhost:9090/users/new/
之类的网址时,我收到500内部服务器错误。
我使用%{HTTP_POST}
尝试了类似的规则,但这也不起作用。我觉得我错过了一些东西,在网上搜索一直指着我已经尝试过的规则。
制定适用于开发和生产的规则的最佳方法是什么?
注意
经过@anubhava的一些很好的建议后,我重新组织了我的规则,并针对现有需求找到了一些更好的规则。我最终得到了一个新的PHP扩展规则和他的建议,它现在正在localhost
和生产。
答案 0 :(得分:1)
正则表达式中没有$2
。
你可以尝试这段代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?[^/])$ /$1/ [R=302,L]
# hiding .php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]
在新浏览器中试用以避免301缓存问题。