.htaccess 文件在我的服务器中不起作用

.htaccess file is not working in my Server

我的站点位于 https://itjmovies.com/milan/public/,我想用 .htaccess 文件重写 URL。从 https://itjmovies.com/milan/public/https://itjmovies.com/milan/ 但它不起作用。 还有 https://itjmovies.com/milan/public/auth/index.php?page=newhttps://itjmovies.com/milan/public/auth/new/ 但这也不起作用。

我将我的 .httaccess 文件保存在 /www/wwwroot/itjmovies.com/milan/.htaccess

我的 .htaccess 文件:

RewriteEngine On
RewriteRule ^/(.*)$ /public/ [R=301,NC,L]
RewriteRule ^public/auth/([a-zA-Z]+) /index.php?page= [QSA,L]

谢谢你:)

我不确定您的编辑是否使您的问题更加清晰。在您的问题描述中,规定的重写(from/to)似乎与我认为的意图不符(并且与您编写指令的顺序冲突),但无论如何......

我的假设:

  • /public不应该是可见的URL的一部分。尽管您的站点位于 /milan/public 目录中。您正在提出 /milan/<anything>.
  • 形式的请求
  • 您需要在内部重写从 /milan/<anything> / 到 /milan/public/<anything> 的所有请求。
  • 形式为 /milan/public/auth/<something>/ 的请求(请注意尾部斜杠,如您的示例中所述)应在内部重写为 /milan/public/auth/index.php?page=<something>

我会有 2 个 .htaccess 文件。 /milan 子目录中的一个只是 rewrites/forwards 请求 public 子目录。 /milan/public 中的另一个 .htaccess 文件处理特定于您的应用程序的重写。

例如:

# /milan/.htaccess

RewriteEngine On

# Forward all requests to the "public" subdirectory
RewriteRule (.*) public/ [L]
# /milan/public/.htaccess

RewriteEngine On

# Rewrite "auth/<something>/" to "auth/index.php?page=<something>"
RewriteRule ^auth/([^/]+)/$ auth/index.php?page= [QSA,L]

/milan/public/.htaccess 中的 .htaccess 文件还用于在父目录中的 .htaccess 文件将请求重写到 public 子目录时防止重写循环。这是因为默认情况下不继承 mod_rewrite 指令。

仅当您希望原始请求中包含查询字符串时才需要 QSA 标志。

RewriteRule模式(第一个参数)匹配 URL-相对于包含 .htaccess 文件的目录的路径。


RewriteRule ^/(.*)$ /public/ [R=301,NC,L]
RewriteRule ^public/auth/([a-zA-Z]+) /index.php?page= [QSA,L]

关于您尝试的一些注意事项 - 接近,但有一些严重错误:

  • RewriteRule模式匹配的URL路径不以斜杠开头(在.htaccess中使用时),所以正则表达式 ^/(.*)$ 永远不会匹配。
  • 第一条规则也是外部重定向(即公开 /public 子目录),这似乎不正确。你真的想要可见的 URL 中的 /public - 如果是这样,那么你应该直接链接到 /public 子目录,而不是依赖于重定向?
  • 第一条规则是重定向到文档根目录中的 /public,而不是 /milan/public
  • 一旦更正,第一条规则也会导致重写循环(500 内部服务器错误),因为它会重复重写请求...public/public/public/<something>
  • 第二条规则也是重写文档根目录中的/index.php,而不是/milan/public/auth/index.php