.htaccess 仅在一个 link 上导致 403
.htaccess is causing 403 on one link only
有点奇怪,我觉得必须回答,但我似乎找不到。
我在自定义 PHP 站点上的 .htaccess 文件中有以下内容 (不是 WORDPRESS):
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(contact|gallery|links)$ .php [L]
我不明白为什么“画廊”只给我 403。
example.com/links
example.com/contact
两者都按预期工作并转到所需的页面。不过
example.com/gallery
重定向到
example.com/gallery/
并抛出 403 禁止错误
gallery.php是一个页面,可以从同一个页面访问URL
gallery.php 上没有任何内容可以重定向或检查查询字符串或比较 URI。看不懂。
真的对 .htaccess 的东西视而不见(总是有),所以非常感谢任何帮助。我做错了什么?!
此外,在 https://htaccess.madewithlove.com/ 上测试它,它说我的工作是正确的,所以真的不明白它发现了什么不正确。为什么它认为画廊是一个子文件夹,而不是 URL?
我刚刚意识到,我确实有一个图库文件夹,所以如果有人能告诉我如何使用 htaccess 访问页面而不是文件夹,我将不胜感激!如果有帮助,图库文件夹中有一个 .htaccess 以防止直接访问图像:
Options -Indexes
Options -ExecCGI
# AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
<Files ^(*.jpeg|*.jpg)>
order deny,allow
deny from all
</Files>
<FilesMatch "\.(jpe?g)$">
order allow,deny
allow from all
</FilesMatch>
他们会不会有冲突?
由于 gallery
是物理目录,您需要设置 DirectorySlash Off
以防止 mod_dir 通过 301 外部重定向附加尾部斜杠。 (此重定向会被浏览器永久缓存,因此您需要在继续之前清除浏览器缓存。)
但是请注意,当禁用 DirectorySlash
时,您还必须确保 Options -Indexes
也被设置为防止 mod_autoindex 在省略尾部斜杠时生成目录列表一个目录,因为该目录中的 DirectoryIndex
文档将不再阻止生成目录列表。见 security warning under the DirectorySlash
directive in the Apache Docs.
您可能还需要设置RewriteOptions AllowNoSlash
以允许mod_rewrite匹配没有尾部斜杠的目录。
然后您需要修改现有规则...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(contact|gallery|links)$ .php [L]
删除前两个 RewriteCond
指令。它们不是必需的,因为您想要重写 3 个特定的 URL。如果任何条件失败,则不会发生重写。
如果 contact
、gallery
或 links
碰巧以物理文件(极不可能)或目录(gallery
似乎是一个目录)的形式存在,则重写不会发生。
总结
DirectorySlash Off
Options +FollowSymlinks -Indexes
RewriteEngine On
RewriteOptions AllowNoSlash
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(contact|gallery|links)$ .php [L]
有点奇怪,我觉得必须回答,但我似乎找不到。
我在自定义 PHP 站点上的 .htaccess 文件中有以下内容 (不是 WORDPRESS):
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(contact|gallery|links)$ .php [L]
我不明白为什么“画廊”只给我 403。
example.com/links
example.com/contact
两者都按预期工作并转到所需的页面。不过
example.com/gallery
重定向到
example.com/gallery/
并抛出 403 禁止错误
gallery.php是一个页面,可以从同一个页面访问URL
gallery.php 上没有任何内容可以重定向或检查查询字符串或比较 URI。看不懂。
真的对 .htaccess 的东西视而不见(总是有),所以非常感谢任何帮助。我做错了什么?!
此外,在 https://htaccess.madewithlove.com/ 上测试它,它说我的工作是正确的,所以真的不明白它发现了什么不正确。为什么它认为画廊是一个子文件夹,而不是 URL?
我刚刚意识到,我确实有一个图库文件夹,所以如果有人能告诉我如何使用 htaccess 访问页面而不是文件夹,我将不胜感激!如果有帮助,图库文件夹中有一个 .htaccess 以防止直接访问图像:
Options -Indexes
Options -ExecCGI
# AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
<Files ^(*.jpeg|*.jpg)>
order deny,allow
deny from all
</Files>
<FilesMatch "\.(jpe?g)$">
order allow,deny
allow from all
</FilesMatch>
他们会不会有冲突?
由于 gallery
是物理目录,您需要设置 DirectorySlash Off
以防止 mod_dir 通过 301 外部重定向附加尾部斜杠。 (此重定向会被浏览器永久缓存,因此您需要在继续之前清除浏览器缓存。)
但是请注意,当禁用 DirectorySlash
时,您还必须确保 Options -Indexes
也被设置为防止 mod_autoindex 在省略尾部斜杠时生成目录列表一个目录,因为该目录中的 DirectoryIndex
文档将不再阻止生成目录列表。见 security warning under the DirectorySlash
directive in the Apache Docs.
您可能还需要设置RewriteOptions AllowNoSlash
以允许mod_rewrite匹配没有尾部斜杠的目录。
然后您需要修改现有规则...
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{QUERY_STRING} ^$ RewriteRule ^(contact|gallery|links)$ .php [L]
删除前两个 RewriteCond
指令。它们不是必需的,因为您想要重写 3 个特定的 URL。如果任何条件失败,则不会发生重写。
如果 contact
、gallery
或 links
碰巧以物理文件(极不可能)或目录(gallery
似乎是一个目录)的形式存在,则重写不会发生。
总结
DirectorySlash Off
Options +FollowSymlinks -Indexes
RewriteEngine On
RewriteOptions AllowNoSlash
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(contact|gallery|links)$ .php [L]