我在Apache HTTPD中使用mod_rewrite实现友好URL。我的.htaccess文件如下所示:
RewriteEngine On
rewritecond %{REQUEST_URI} !((.php|.htm|.css|.jpg|.png|.gif|.js|.ico)|/static/|/uploads/)
RewriteRule (.*) /main.php?path=$1 [QSA,L]
(我知道它有点混乱,它与遗留代码相关,我将在以后修复)
如果用户输入的内容类似于
,则此功能非常有效但是,如果用户忘记了斜杠
然后他们被重定向到
这会让网址变得非常丑陋,而且我想修复它,但是我对mod_rewrite的理解不足以了解错误。有没有人有机会帮助我?
谢谢!
答案 0 :(得分:1)
由于mod_dir
在目录前添加了一个尾部斜杠,因此发生了这种情况。您应该使用RewriteCond
来跳过重写现有文件/目录,如下所示:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /main.php?path=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+?)/$ /main.php?path=$1 [QSA,L]
答案 1 :(得分:0)
最后,我重新安排了我的目录结构并整理了我的.htaccess文件以简单地包含
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /main.php?path=$1 [QSA]
这确实意味着我将不得不进行更多的手动404错误处理,但这对我来说并不是一个大问题,因为我的URL结构的性质意味着无论如何我都必须这样做。
非常感谢anubhava帮助我解决这个问题,我已经将他的答案标记为正确,尽管他的评论确实帮助了我。
编辑:对RewriteConds使用REQUEST_FILENAME而不是REQUEST_URI非常重要。我不确定为什么,但是如果你使用错误的话就不行。