为服务器上不存在文件的URL动态创建内容的正确方法
Proper way to dynamically create content for URL where file does not exist on server
当我使用angular时,路由器可以捕获用户请求的任何url并加载正确的模板。例如,如果用户转到mysite.com/blog
,即使我的服务器上没有名为blog
的文件,angular路由器也可以提供模板。
我现在正在开发一个没有angular的网络应用程序,该应用程序使用用户名作为URL为每个用户创建一个页面(如twitch.tv或twitter)。我发现加载mysite.com/username
会加载index.php
,我可以使用window.location.pathname
从URL中获取用户名,然后加载该用户的内容。老实说,我不太清楚为什么这样做有效。我的.htaccess文件由:ErrorDocument 404 /
组成,但如果它在"找不到文件"上重定向,为什么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的信息。
- 通过两种方法创建和更新 CSS
- javascript基对象,用不同的方法创建另外两个对象
- 为命名空间上公开的方法创建类型定义
- 尝试理解 JavaScript 中的对象和方法创建
- Meteor Braintree -- 通过 Meteor 方法创建客户端令牌
- 为嵌套在对象深处的方法创建别名
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 我们可以在 JavaScript 中使用 eval 方法创建 HTML 标签吗?
- 如何从原型方法创建对象的实例
- 为什么谷歌在其Javascript代码中为方法创建缩写
- 使用推送方法创建数组
- 如何访问使用jquery insertAfter方法创建的元素
- 如何通过objx的collect()方法创建json字符串特定字段的数组
- 如何从通过createHTMLDocument方法创建的文档中提取样式表
- 如何使用post方法创建重定向链接
- jQuery无法识别由.html()方法创建的选择器
- 为什么JavaScript中的顶级函数是作为window的方法创建的
- Javascript:通过不同的方法创建字符串
- 用方法创建javascript对象
- 在Javascript中使用Google calendar API插入方法创建新日历会返回错误400 "Mis