【问题标题】:Mod_Rewrite for constantly changing urlMod_Rewrite 用于不断变化的 url
【发布时间】:2015-08-14 19:52:25
【问题描述】:

我有一个网址,可以说它的 blog.art.ca/Customer/AAAABBBB/index.html 我想隐藏客户和 AAAABBBB。现在 AAAABBBB 可以是任何 8 个字符的字母数字代码。

Options +FollowSymLinks -Multiviews -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^Customer/(.*)$ /$1 [L,R]
</IfModule>

我尝试了很多方法,但是,我要么得到 ERR_TOO_MANY_REDIRECTS,要么只是导致服务器崩溃。任何建议将不胜感激!

【问题讨论】:

  • “我想隐藏客户和 AAAABBBB”?我没有看到上面的代码是如何创建重定向循环的?当您说“导致服务器崩溃”时-字面意思是?!你得到什么错误?
  • 特别是它实际上只是说服务器似乎崩溃了。我是 HostPapa 的新手,所以我不确定如何澄清它。我不确定上面的代码是否会重新定向,因为我从来没有处理过 mod_rewrite 并且我找不到任何解释如何处理这些更改代码的东西,这就是我发现的至少处理客户文件夹

标签: .htaccess mod-rewrite url-rewriting url-masking


【解决方案1】:

您仍然需要允许请求到达实际请求的资源,因此您需要两组规则,一组用于浏览器,以显示新的较短 URL(301 永久重定向),另一组用于撤消此映射回原始 URL,以便 Apache 可以找到正确的内容来提供服务,例如。

RewriteBase /

# Remove Customer/AAAABBB from the URL shown in the browser.
RewriteCond %{QUERY_STRING} !customer=
RewriteRule ^Customer/([^/]+)/(.*) /$2?customer=$1 [L,QSA,R=301]

# Internally undo any masked rewrites.
RewriteCond %{QUERY_STRING} customer=([^&]+)
RewriteRule (.*)  /Customer/%1/$1 [L]

【讨论】:

  • 我尝试按原样使用它,但它返回了 500(内部服务器错误),但它正在重写 url。通常,该 URL 匹配 custom.company.ca/Customer/AAAABBBB/index.html,现在链接变为 custom.company.ca/index.html?customer=AAAABBBB。
  • 所以第一条规则按预期工作,/Customer/Aaaaabbbb/ 不再在 URL 中(隐藏),但现在作为 CGI 变量传递。可以通过简单的调整制作一个完全隐形的 Cookie。无论如何,500 错误将归结为第二条规则的实施,该规则创建了一个与您的后端期望不匹配的 URL。
  • 我已尝试对第二部分进行大量更改以使其正常工作,但遇到了一个问题,现在它似乎只是忽略了 .htaccess 文件。我确实相信您提交的答案是正确的,但我显然无法可靠地实施它。
  • 删除/注释掉上述规则,打开浏览器并浏览该站点,并使用浏览器的开发工具捕获所有组件的实际 URL 请求。如果 URL 没有映射到您的网络服务器上的物理资产,则您需要考虑其他重写规则。
  • 我可以使用 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ Employee/$1 解决我的问题,因为我们决定将另一个文件夹保留为 URL 的一部分。但是,我确实让您的代码按预期运行,所以我接受它作为答案,因为它是正确的。原来我们对整个域都有一个重写规则。
猜你喜欢
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 2012-02-25
  • 2021-04-11
相关资源
最近更新 更多