【问题标题】:HTACCESS Treat important directory as a parameterHTACCESS 把重要目录当作参数
【发布时间】:2016-04-10 04:25:07
【问题描述】:

我希望将目录 www.example.com/core 转换为字符串,而不是仅仅禁止访问它。这可能吗?

更新(仍然没有运气):

我当前的 .htaccess

#Options -Multiviews
RewriteEngine On

#Remove the comments below to enable enforcing HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Handle Front Controller...
RewriteBase /public
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#RewriteRule ^(.*)$ launcher.php?urls=$1 [QSA,L]
RewriteRule . launcher.php [L]

这里有一些场景:

我写了一个网址www.example.com/some-dir-that-does-not-exist,效果很好。

我写了一个网址www.example.com/url-that-DOES-exist,浏览器将其重定向到www.example.com/url-that-DOES-exist/?url=url-that-DOES-exist

【问题讨论】:

  • 你能说得更清楚些吗?我的意思是如果我 GET 服务器会响应 |发布 |头 |任何请求http://www.example.com/core
  • 我不是在谈论不存在的目录。那些我没有问题的。但是,如果我希望将确实存在的目录视为不存在的目录。现在,如果我写 www.example.com/core,浏览器会转到 www.example.com/core/?url=core
  • 我不确定这是否是您想要实现的目标。如果你添加这条规则RewriteRule ^/core(/.*)?$ - [R=404,L],它会做你想要的吗?我不太明白要翻译成字符串的部分
  • 它仍然重定向到/core/?url=core,现在添加了一个 500 错误
  • 您希望将现有目录视为不存在的目录吗?

标签: regex apache .htaccess mod-rewrite directory


【解决方案1】:

这是由于mod_dir 模块在真实目录前添加了一个斜杠,并在您的重写规则之后进行了 301 重定向。

要修复它,如下所示:

DirectorySlash Off
RewriteEngine On
RewriteBase /public/

RewriteCond %{THE_REQUEST} /launcher\.php [NC]
RewriteRule ^ - [F]

#Remove the comments below to enable enforcing HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# add a trailing slash to directories
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L]    

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/?$ launcher.php?urls=$1 [QSA,L]

【讨论】:

  • 让我看看这个
  • 对不起,它不起作用。仍然添加一个斜杠。也许您想将此讨论移至聊天?我觉得它会很长
  • 不,不会很长,因为我怀疑您正在访问浏览器缓存。清除浏览器缓存并重新测试。
  • 顺便说一句,我已经在我的 Apache 上测试了所有这些代码。 localhost/core 变为 localhost/core/ 仍然路由到 launcher.php?urls=core
  • 这确实有效,我认为使用 chrome incognito 会假定已清除缓存,但当我明确清除它时,它确实有效。非常感谢!非常感谢!
【解决方案2】:

您的代码将变为:

#Options -Multiviews
RewriteEngine On

#Remove the comments below to enable enforcing HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteBase /public

# Treat existing /core directory as non-existing (handled by launcher.php)
RewriteCond %{REQUEST_URI} ^/core(/.*)?$
RewriteRule . launcher.php [L]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#RewriteRule ^(.*)$ launcher.php?urls=$1 [QSA,L]
RewriteRule . launcher.php [L]

【讨论】:

  • 仍然添加 /core/url=core
  • 在.htaccess文件中修改重定向规则后,请务必清除浏览器的浏览数据。
  • 你是什么意思,为什么?
  • 您的浏览器可能仍在遵循您网站中的旧重定向。
  • 我打开了一个隐身模式,一切都一样
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 2014-03-06
  • 2023-02-14
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
相关资源
最近更新 更多