Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为服务器上不存在文件的URL动态创建内容的正确方法_Javascript_.htaccess_Routes_Url Routing_Angularjs Routing - Fatal编程技术网

Javascript 为服务器上不存在文件的URL动态创建内容的正确方法

Javascript 为服务器上不存在文件的URL动态创建内容的正确方法,javascript,.htaccess,routes,url-routing,angularjs-routing,Javascript,.htaccess,Routes,Url Routing,Angularjs Routing,当我使用angular时,路由器可以捕获用户请求的任何url并加载适当的模板。例如,如果用户访问mysite.com/blog,即使我的服务器上没有名为blog的文件,angular router也可以提供模板 我现在正在开发一个web应用程序,它使用每个用户的用户名作为URL(比如twitch.tv或twitter),为每个用户创建一个页面。我发现加载mysite.com/username会加载index.php,我可以使用window.location.pathname从URL中获取用户名,

当我使用angular时,路由器可以捕获用户请求的任何url并加载适当的模板。例如,如果用户访问
mysite.com/blog
,即使我的服务器上没有名为
blog
的文件,angular router也可以提供模板

我现在正在开发一个web应用程序,它使用每个用户的用户名作为URL(比如twitch.tv或twitter),为每个用户创建一个页面。我发现加载
mysite.com/username
会加载
index.php
,我可以使用
window.location.pathname
从URL中获取用户名,然后加载该用户的内容。老实说,我不太清楚为什么会这样。My.htaccess文件由以下部分组成:
errordocument404/
,但如果在未找到文件时重定向,为什么url会附加
/username

我的方法似乎很老套,有时我会出错,说没有找到
/username
,而且
mysite.com/username
也没有保存为最近访问过的站点的建议,我猜是因为它从未找到文档


有人能解释一下这种重定向是如何工作的吗?这种动态路由的最佳实践是什么?

ErrorDocument
有几种方法可以使用它。您使用它的方式是,使用相对于
DocumentRoot
的url,Apache将使用内部重写来服务页面内容。据我所知,Apache将提供原始http状态代码,在本例中为404

如果希望index.php文件充当路由器,可以使用mod_rewrite在内部重写对该脚本的所有请求。然后脚本决定要做什么。如果尚未启用mod_rewrite,则需要启用它并重新启动Apache

RewriteEngine on

RewriteRule ^ index.php [L]
或者,您可以决定仅在请求的资源看起来像用户名时执行此操作:

RewriteEngine on

RewriteRule ^[^/]+$ index.php [L]
或者如果请求的资源不是现有的目录或文件。此方法可能比其他方法慢,因为需要执行子请求来检查此情况

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

您可以在其上找到有关mod_rewrite的更多信息。

ErrorDocument
有几种使用方法。您使用它的方式是,使用相对于
DocumentRoot
的url,Apache将使用内部重写来服务页面内容。据我所知,Apache将提供原始http状态代码,在本例中为404

如果希望index.php文件充当路由器,可以使用mod_rewrite在内部重写对该脚本的所有请求。然后脚本决定要做什么。如果尚未启用mod_rewrite,则需要启用它并重新启动Apache

RewriteEngine on

RewriteRule ^ index.php [L]
或者,您可以决定仅在请求的资源看起来像用户名时执行此操作:

RewriteEngine on

RewriteRule ^[^/]+$ index.php [L]
或者如果请求的资源不是现有的目录或文件。此方法可能比其他方法慢,因为需要执行子请求来检查此情况

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
您可以在其上找到有关mod_rewrite的更多信息