【问题标题】:htaccess server side rewrite not workinghtaccess服务器端重写不起作用
【发布时间】:2011-12-20 22:33:56
【问题描述】:

我的 htacess 重写工作正常,页面将转到它们应该去的地方,但是 url 栏发生了变化,我不希望它发生变化。我认为这是一个内部重定向,并且会显示 URL 中的任何内容。它不是那样工作的。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/[^/]+(/(.+))?$
RewriteRule . /%2 [L] 

基本上,该 url 正在重写为新的 URL。我怎样才能让它不这样做?

【问题讨论】:

  • 好的,所以当有子目录时,你不能有斜杠,当没有子目录时,你可以。这就是它的工作方式。正则表达式是巫术。
  • 如果关闭 DirectorySlash 不起作用(或者您不想关闭),请尝试自行检测目录。

标签: .htaccess url-rewriting rewrite


【解决方案1】:

根据您的最后一条评论,试试这个

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/[^/]+(/?|/(.+))$
RewriteRule . /%2 [L]

它应该匹配一个可选的尾部斜杠,例如http://mydomain.com/somedirhttp://mydomain.com/somedir/ 和一个在例如 http://mydomain.com/somedir/dir2 之后的目录

【讨论】:

    【解决方案2】:

    如果 %2 后向引用匹配的任何内容不以扩展名结尾,mod_dir 可能会认为它是一个目录。如果它缺少尾部斜杠,mod_dir 将在外部将浏览器重定向到相同的 URL,但带有尾部斜杠。您可以尝试在 .htaccess 文件或服务器配置中打开 DirectorySlash Off

    编辑

    您可以尝试通过自己检查目录并添加尾部斜杠来绕过 mod_dir,这样 mod_dir 就不会重定向您。它看起来像这样:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} ^/[^/]+(/(.+))$
    RewriteCond %{DOCUMENT_ROOT}/%2 -d
    RewriteRule ^[^/]+(/(.+))$ /$2/ [L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2017-05-17
      • 1970-01-01
      相关资源
      最近更新 更多