htaccess 阻止原始文件但允许重写
htaccess block original file however allow rewrite
我的 /.htaccess 中有以下条目
RewriteEngine On
RewriteBase /
RewriteRule ^signin.php - [L,gone]
RewriteRule ^sign-in/?$ /signin.php [L]
我想要实现的是允许用户访问 /sign-in
而不是原始文件 /signin.php
我看到了另一个问题,但是当我尝试实现答案时,我在 /sign-in
和 /signin.php
.
上都遇到了 gone
错误
参考问题:
Alias within htaccess, and block access to original file? (URL rewriting)
感谢您的帮助。
要将对 /signin.php
的任何直接请求重定向到 /sign-in
并在内部将 /sign-in
重写回 /signin.php
那么你可以这样做:
RewriteEngine On
RewriteRule ^signin\.php$ /sign-in [R=301,L]
RewriteRule ^sign-in$ signin.php [END]
END
标志 (Apache 2.4) 防止重写引擎的任何进一步循环,因此防止重写的 URL 被重定向回 /sign-in
,否则会导致重定向循环。
第一条规则不需要 END
标志,因为外部重定向会立即触发。 (仍然需要 L
标志。)
此处不需要 RewriteBase
指令。
我删除了 /sign-in
上可选的尾部斜杠,因为这可能会造成重复内容问题。如果您希望允许可选的尾部斜杠,则重定向到规范的 URL( 不带 尾部斜杠,或者 with 如果您愿意) 代替。
更新:
I saw this other question however when I tried to implement the answer I get gone
error on both /sign-in
and /signin.php
.
Referenced Question:
Alias within htaccess, and block access to original file? (URL rewriting)
参考答案中的 Apache 解决方案不太正确。关于在 PHP 中执行此操作的第一部分的答案似乎已被“接受”。
在提出该问题时(2011 年),他们可能一直在使用 Apache 2.2。 END
标志仅在 Apache 2.4 中引入。
他们需要这样做,以防止重定向循环:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^about.php /about [L,R=301]
RewriteRule ^about$ about.php [L]
我的 /.htaccess 中有以下条目
RewriteEngine On
RewriteBase /
RewriteRule ^signin.php - [L,gone]
RewriteRule ^sign-in/?$ /signin.php [L]
我想要实现的是允许用户访问 /sign-in
而不是原始文件 /signin.php
我看到了另一个问题,但是当我尝试实现答案时,我在 /sign-in
和 /signin.php
.
gone
错误
参考问题: Alias within htaccess, and block access to original file? (URL rewriting)
感谢您的帮助。
要将对 /signin.php
的任何直接请求重定向到 /sign-in
并在内部将 /sign-in
重写回 /signin.php
那么你可以这样做:
RewriteEngine On
RewriteRule ^signin\.php$ /sign-in [R=301,L]
RewriteRule ^sign-in$ signin.php [END]
END
标志 (Apache 2.4) 防止重写引擎的任何进一步循环,因此防止重写的 URL 被重定向回 /sign-in
,否则会导致重定向循环。
第一条规则不需要 END
标志,因为外部重定向会立即触发。 (仍然需要 L
标志。)
此处不需要 RewriteBase
指令。
我删除了 /sign-in
上可选的尾部斜杠,因为这可能会造成重复内容问题。如果您希望允许可选的尾部斜杠,则重定向到规范的 URL( 不带 尾部斜杠,或者 with 如果您愿意) 代替。
更新:
I saw this other question however when I tried to implement the answer I get
gone
error on both/sign-in
and/signin.php
.Referenced Question: Alias within htaccess, and block access to original file? (URL rewriting)
参考答案中的 Apache 解决方案不太正确。关于在 PHP 中执行此操作的第一部分的答案似乎已被“接受”。
在提出该问题时(2011 年),他们可能一直在使用 Apache 2.2。 END
标志仅在 Apache 2.4 中引入。
他们需要这样做,以防止重定向循环:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^about.php /about [L,R=301]
RewriteRule ^about$ about.php [L]