.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=new
到 https://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
。
我的站点位于 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=new
到 https://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
。