【问题标题】:mod_rewrite preventing from overwriting foldersmod_rewrite 防止覆盖文件夹
【发布时间】:2014-05-26 17:12:34
【问题描述】:

我有以下 mod_rewrite 代码:

RewriteEngine On
RewriteRule /(.*)$ index.php?action=$1

它将例如将http://test.com/page2更改为http://test.com/index.php?action=page2

它做得很好,但我所有的文件夹现在也被覆盖了。如何告诉 mod_rewrite 只是覆盖根文件夹 url?

【问题讨论】:

  • 所以您不想重写带有/ 的内容?只有 URL 像 /abc, /def-ghi 而不是 /abc/def
  • 你是在 .htaccess 还是服务器级/虚拟主机配置中定义这个? (前导 / 表示服务器配置,而不是 .htaccess)
  • @MichaelBerkowski 首先:是的。第二:只有 .htaccess,我有一个 Web 服务器,所以没有服务器级!

标签: apache .htaccess mod-rewrite


【解决方案1】:

这应该可行:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([^/]+)/?$ index.php?action=$1 [L,QSA]

【讨论】:

  • 它不会影响文件夹,但不知何故 Joomla 并没有真正得到它。如果我自己打电话 index.php?test=test 它正在工作。但是,如果我用 index.php?test=$1 调用 /test 则它将不起作用(Joomla 显示 404)。为什么?
  • 好吧,你没有在任何地方提到 Joomla。
  • 这应该不是问题,因为 mod_rewrite 无论如何都会打开 index.php?action=$1。如果我输入 index.php?action=whatever in,这不会产生 404。那么问题可能出在哪里?
  • 添加 R 标志以使其成为 RewriteRule ^/?([^/]+)/?$ index.php?action=$1 [L,QSA,R] 并查看是否重定向
  • 确实如此。有点奇怪:var/www/vhosts/domain/folder/index.php?action=page2 // 编辑:他重定向的路径是完美的,但它应该只打开 index.php?action=page2
猜你喜欢
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 2015-04-09
相关资源
最近更新 更多