【问题标题】:How to make clean url for html and javascript based sites如何为基于 html 和 javascript 的网站制作干净的 url
【发布时间】:2017-09-04 07:26:51
【问题描述】:

我目前有我的作品集要处理,我希望启用 hayofriese.com/work 之类的链接。在我的本地主机上,这是通过使用 .htaccess 文件解决的,一切运行顺利,但我托管我的网站的服务器不允许或不支持 htaccess 文件。

我将如何着手进行这项工作?

我的代码的工作方式是所有内容都重定向到 index.html。只要有子链接(如 /about 或 /work),javascript 就会检测到并加载相应的页面。我只需要启用重新路由,因为现在当我拥有 hayofriese.com/about 时出现 404 错误,这意味着尽管存在 localhost-working .htaccess 文件,但它并未重定向到 index.html。

任何帮助将不胜感激!

<configSections>
    <sectionGroup name="system.webServer">
        <sectionGroup name="rewrite">
            <section name="rewriteMaps" overrideModeDefault="Allow" />
            <section name="rules" overrideModeDefault="Allow" />
        </sectionGroup>
    </sectionGroup>
</configSections>

<system.webServer>

    <security>
        <requestFiltering>
            <denyUrlSequences>
                <add sequence="engine" />
                <add sequence="inc" />
                <add sequence="info" />
                <add sequence="module" />
                <add sequence="profile" />
                <add sequence="po" />
                <add sequence="sh" />
                <add sequence="theme" />
                <add sequence="tpl(\.html" />
                <add sequence="Root" />
                <add sequence="Tag" />
                <add sequence="Template" />
                <add sequence="Repository" />
                <add sequence="code-style" />
            </denyUrlSequences>
            <fileExtensions>
                <add fileExtension=".sql" allowed="false" />
                <add fileExtension=".pl" allowed="false" />
            </fileExtensions>
        </requestFiltering>
    </security>
    <directoryBrowse enabled="true" />
    <caching>
        <profiles>
            <add extension=".php" policy="DisableCache" kernelCachePolicy="DisableCache" />
            <add extension=".html" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" duration="14:00:00:00" />
        </profiles>
    </caching>
    <rewrite>
      <rules>
        <rule name="Imported Rule 1" stopProcessing="true">
          <match url="^(.*)$" ignoreCase="false" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^hayofriese\.com$" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="http://www.hayofriese.com/{R:1}" />
        </rule>
        <rule name="Imported Rule 2" stopProcessing="true">
          <match url="^(.*)$" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
            <add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.html?q={R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
    <defaultDocument>
        <files>
            <remove value="index.html" />
            <add value="index.html" />
        </files>
    </defaultDocument>
   <httpErrors>
       <remove statusCode="404" subStatusCode="-1" />
       <error statusCode="404" prefixLanguageFilePath="" path="/index.html" responseMode="ExecuteURL" />
   </httpErrors>
</system.webServer>

我得到的错误如下:

必须在“section”标签上指定“type”属性。 (...\web.config 第 7 行)

必须在“section”标签上指定“type”属性。 (...\web.config 第 8 行)

【问题讨论】:

  • 您的意思是要链接到,例如,yoursite.com/work,而不是让常规链接指向那里,而是链接到 yoursite.com /index.html 然后使用javascript从索引加载适当的页面?这是真的,你为什么要这样做?
  • 我的意思是启用重新路由,所以在 url 栏中输入 name.com/page 然后它将转到该页面。我的 index.html 开始将 url 中的页面加载到站点中。所以我不希望 name.com/page 转到 name.com/index.html,而是将其屏蔽为 /page,如果这有意义的话。
  • 您的意思是,您只有一个页面而不是多个页面(索引、工作、关于...),但您想让其他 URL 指向相应的部分页面,对吗?在这种情况下,为什么不简单地使用 yoursite.com/#work
  • 有点像。基本上该网站有多个 html 页面。它就像一块磁铁板。如果你去/工作,它会从板上取下磁铁并在上面放置一个不同的磁铁。它永远不会离开 index.html,但它里面的内容会被切换。如果你想看看它是如何运作的,去the site here
  • 请不要破坏您的问题。

标签: javascript html apache .htaccess


【解决方案1】:

由于您使用 .htaccess 我想在您的 localhost 安装上使用 WAMP/Apache,但您的网站托管在运行在 IIS 上的服务器(标题中报告的 Microsoft-IIS/7.5)上,它使用另一个目录配置文件。

你有两个选择:

  • 如果可能,请将您的主机计划更改为另一个使用 Apache 的计划(如果您出于某种原因不想要 Linux 主机,一些托管服务提供商会在 Windows 上提供 Apache)。 IMO 这将是使您的测试环境与您的网站服务器尽可能相似的最佳选择。

  • 在 IIS 中使用web.config,或多或少相当于.htaccess,请查看此链接:

    .htaccess or .htpasswd equivalent on IIS?

【讨论】:

  • 实际上,您还有第三种选择,不是用其他 URL 替换当前 URL,而是将其重写为指向有问题的相应 ID。例如,而不是hayofriese.com/work 使用hayofriese.com/#work,几乎相同,不需要在服务器上进行 URL 重定向(您可以使用 Location.hash 访问 URL 的那部分)。
  • 按照您建议的教程进行操作,并让 /page 页面正常工作。现在的问题是根页面不起作用。如果我去 hayofriese.com,它会显示配置错误
  • 您可以编辑问题并将web.config 文件的内容放入吗?
  • 完成了,伙计。我应该看什么?让我知道未来?
  • 我访问了hayofriese.com/work,它也失败了。您似乎只是从链接中复制了示例 web.config 文件,而没有使用您在 .htaccess 中使用的示例重写条件修改示例重写条件。请注意,示例文件会进行其他操作,例如重新配置扩展,这不是“标准”配置,而是如何翻译该页面中显示的 .htaccess 的示例。您应该已经编辑了您的 web.config 文件,并且只放置了与使用 自己的 重写条件重写 URL 相关的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多