Max*_*Max 6 apache mod-rewrite redirect
我目前正在使用mod_rewrite进行内部重定向
RewriteCond %{REQUEST_URI} ^/pattern$
RewriteRUle .* file.php
Run Code Online (Sandbox Code Playgroud)
但是,我想file.php通过将对该文件的请求重定向到未找到页面的URL 来阻止直接访问.
RewriteCond %{REQUEST_URI} /file.php
RewriteRule .* page-not-found.php
Run Code Online (Sandbox Code Playgroud)
问题是,当我执行第一次重定向时,第二条规则也适用,因此会破坏我的第一个内部重定向.
[问]有没有办法允许第一次重定向,但阻止直接访问重定向文件?
使用ENV:REDIRECT_STATUS变量(参见mromaine对"mod_rewrite的隐藏功能"社区维基的贡献:
RewriteCond %{REQUEST_URI} ^/pattern$
RewriteRule .* file.php
# Redirect direct access to file.php
RewriteCond %{REQUEST_URI} /file.php
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule .* page-not-found.php
Run Code Online (Sandbox Code Playgroud)
测试用例:
somefile.htmsomedir索引文件file.php文件page-not-found.php文件每个HTTP响应都是HTTP 200.
编辑:灵感来自@AndrewR的答案(当前形式似乎对我不起作用 - 看起来第二条规则无论如何都应用了.).htaccess唯一可以使用密钥的解决方案.
如果遇到有效模式,请在查询字符串中添加密钥.
然后在决定页面重定向时测试该密钥.
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} ^/pattern$
RewriteRule .* /file.php?SUPER_SEKRIT_KEY [QSA]
RewriteCond %{QUERY_STRING} !SUPER_SEKRIT_KEY
RewriteCond %{REQUEST_URI} /file.php
RewriteRule .* /test/page-not-found.php [L,F]
Run Code Online (Sandbox Code Playgroud)
当然,使用更复杂的密钥,仅用于内部重定向!否则,用户将能够获取密钥.
| 归档时间: |
|
| 查看次数: |
7331 次 |
| 最近记录: |