如何为基于html和javascript的站点创建干净的url

如何为基于html和javascript的站点创建干净的url,javascript,html,apache,.htaccess,Javascript,Html,Apache,.htaccess,我目前有我的投资组合要处理,我正在寻找像hayofriese.com/work这样的链接。在我的本地主机上,这可以通过使用.htaccess文件来解决,并且一切都运行顺利,但是我的站点所在的服务器不允许使用htaccess文件或不支持它 我该怎么做才能让这一切顺利进行呢 我的代码的工作方式是所有内容都重定向到index.html。只要有子链接(如/about或/work),javascript就会检测到并加载相应的页面。我只需要启用重新路由,因为现在当我使用hayofriese.com/abou

我目前有我的投资组合要处理,我正在寻找像hayofriese.com/work这样的链接。在我的本地主机上,这可以通过使用.htaccess文件来解决,并且一切都运行顺利,但是我的站点所在的服务器不允许使用htaccess文件或不支持它

我该怎么做才能让这一切顺利进行呢

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

任何帮助都将不胜感激

<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行)


由于您使用的是
.htaccess
,因此我假设在本地主机安装上使用WAMP/Apache,但您的网站托管在一个运行在IIS上的服务器上(标题中报告的Microsoft IIS/7.5),该服务器使用另一个文件进行目录配置

您有两个选择:

  • 如果可能,将您的主机计划更改为另一个使用Apache的主机计划(如果您出于某种原因不需要Linux主机,则某些主机提供商在Windows上提供Apache)。在我看来,为了使您的测试环境尽可能类似于您的网站服务器,这将是最好的选择

  • 使用
    web.config
    ,这或多或少相当于IIS中的
    .htaccess
    ,请检查以下链接:


由于您使用了
.htaccess
我假设在本地主机安装上使用WAMP/Apache,但是您的网站托管在一个运行在IIS上的服务器上(如标题中所报告的Microsoft IIS/7.5),该服务器使用另一个文件进行目录配置

您有两个选择:

  • 如果可能,将您的主机计划更改为另一个使用Apache的主机计划(如果您出于某种原因不需要Linux主机,则某些主机提供商在Windows上提供Apache)。在我看来,为了使您的测试环境尽可能类似于您的网站服务器,这将是最好的选择

  • 使用
    web.config
    ,这或多或少相当于IIS中的
    .htaccess
    ,请检查以下链接:


您的意思是,如果要创建指向yoursite.com/work的链接,而不是让常规链接指向yoursite.com/index.html,您需要链接到yoursite.com/index.html,然后使用javascript从索引加载相应的页面吗?这是真的,为什么要这样做?我的意思是启用重新路由,所以在url栏中键入name.com/page,然后它将转到该页面。My index.html开始将url中的页面加载到站点中。因此,我不希望name.com/page转到name.com/index.html,而是将其屏蔽为/page(如果有意义的话)。你的意思是,你没有几个页面(索引、工作、关于…),而是只有一个页面站点,但你想让其他URL指向页面的相应部分,对吗?在这种情况下,你为什么不简单地使用你的site.com/#work呢。基本上,该网站有多个html页面。它就像一块磁铁板。如果你去上班,它会将磁铁从电路板上取下,并在上面放置一个不同的磁铁。它从不离开index.html,但它内部的内容会被切换。如果您想了解它是如何运行的,请转到“请不要污损您的问题”。您的意思是,如果要创建指向yoursite.com/work的链接,而不是让一个常规链接指向yoursite.com/index.html,您可以链接到yoursite.com/index.html,然后使用javascript从索引加载相应的页面?这是真的,为什么要这样做?我的意思是启用重新路由,所以在url栏中键入name.com/page,然后它将转到该页面。My index.html开始将url中的页面加载到站点中。因此,我不希望name.com/page转到name.com/index.html,而是将其屏蔽为/page(如果有意义的话)。你的意思是,你没有几个页面(索引、工作、关于…),而是只有一个页面站点,但你想让其他URL指向页面的相应部分,对吗?在这种情况下,你为什么不简单地使用你的site.com/#work呢。基本上,该网站有多个html页面。它就像一块磁铁板。如果你去上班,它会将磁铁从电路板上取下,并在上面放置一个不同的磁铁。它从不离开index.html,但它内部的内容会被切换。如果你想知道它是如何运行的,请转到“请不要污损你的问题”。事实上,你还有第三个选择,不是用其他URL替换当前URL,而是重写它以指向相关的ID。例如,与使用几乎相同,服务器上不需要URL重定向(您可以使用
Location.hash
)访问URL的该部分)。遵循您建议的教程,使/page页面正常工作。现在的问题是根页面不工作