前几天我询问选择一种存储用户配置文件的方法,并收到David Thomas Garcia的一个有趣的回复,建议我使用Table Module设计模式.看起来这可能是我想要的方向.我在Google上发现的所有内容似乎都是相当高级别的讨论,所以如果有人能指出我的某些例子,或者让我更好地了解所涉及的基本要素,那将是非常棒的.
database database-design design-patterns entity-attribute-value
我正在为一个网站开发用户配置文件系统,并在思考什么是更好(可扩展)的方法.我想出了两个解决方案,我正在寻找任何输入或指向我可能错过的东西.
以下create table语句并不是可执行的,而只是用于了解所涉及的表的布局.
我最初的想法是这样的:
CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_email VARCHAR(320),
user_joined DATATIME,
user_last_seen DATATIME,
user_name_first VARCHAR,
user_name_last VARCHAR,
user_name_alias VARCHAR,
user_location_country VARCHAR,
user_location_region VARCHAR,
user_location_city VARCHAR
# ...
);
Run Code Online (Sandbox Code Playgroud)
显然,这根本不是很可扩展,并且添加了令人讨厌的额外属性.一个优点是我可以快速搜索匹配特定属性集的用户.我已经做了一些环顾四周,这是一种非常常见的方法(例如Wordpress).
我的第二种方法(我正在玩的那种方法)更具可扩展性,但我对性能有点担心:
CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_email VARCHAR(320)
);
CREATE TABLE user_profile(
user_id INT UNSIGNED NOT NULL,
visibility ENUM('PRIVATE', 'PUBLIC'),
name VARCHAR,
value VARCHAR
);
Run Code Online (Sandbox Code Playgroud)
使用此方法,每个用户都有一组与之关联的键值对,这使得添加其他属性变得微不足道,以及在用户登录时加载用户配置文件.但是我丢失了第一种方法中的所有类型信息(例如,DATETIME现在存储为格式化字符串),因此一些搜索变得烦人.这确实让我可以更好地控制用户想要公开显示哪些属性.
混合方法会更好地让我平衡两种方法的优缺点吗?SO使用什么方法?还有其他方法可以解决这个问题吗?
扩展:使用混合方法将来自用户表的属性插入user_profile表以控制其对其他用户的可见性或者可能被视为额外开销是否有利?
我的.htaccess的相关部分看起来像这样:
Options -Indexes
<FilesMatch include>
Order allow,deny
Deny from all
</FilesMatch>
RedirectMatch 404 ^/include(/.*)$
Run Code Online (Sandbox Code Playgroud)
它产生了以下响应:
我可以通过查看我的模式来判断问题可能出现在(/.*)部分,但我尝试的所有内容都给出了相同的结果; 而不是一直得到404我得到一个404的404和其他一切的403.我正在使用的表达式有什么问题?或者,因为我必须为几个目录执行此操作,是否有一种全面的方法可以将所有403响应转换为404?
更新:我发现通过删除FileMatch我得到了更好的结果,所以我的.htaccess现在看起来像这样:
Options -Indexes
RedirectMatch 404 ^/include(/.*)?$ # Added dlamblin's first suggestion
Run Code Online (Sandbox Code Playgroud)
并生成以下响应:
更新:有趣的是,我发现以下产生不同的输出:
RedirectMatch 404 ^/include(/?|/.*)$
RedirectMatch 404 ^/template(/?|/.*)$
Run Code Online (Sandbox Code Playgroud)
模板模式适用于所有情况但是include仍然为include中的所有文件生成403(例如/include/config.inc)这可能是目录名称的问题而不是.htaccess文件本身的问题?
更新:访问/include/config.inc时,我的.htaccess中的以下内容与重定向冲突.
<FilesMatch config>
Order allow,deny
Deny from all
</FilesMatch>
Run Code Online (Sandbox Code Playgroud) apache .htaccess mod-rewrite http-status-code-403 http-status-code-404
我正在开发一个有很多样式表的网站,所有样式表都需要作为服务器端的PHP脚本来处理.我的.htaccess文件看起来像这样:
<FilesMatch "\.(css)$">
ForceType application/x-httpd-php
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
这会导致一个小问题,因为http响应Content-Type字段的mime类型被设置为text/html而不是text/css.
显然我可以通过添加header('Content-Type: text/css')到我的所有文件来解决这个问题,但有更好的方法吗?
我可以在.htaccess文件中执行此操作吗?mod_mime或mod_negotiation提供的指令似乎都不是我正在寻找的.
我试图确定是否有办法检查可能的大型网址列表(> 1000000)的可用性,而无需向每个网址发送GET请求.
是否可以安全地假设如果http://www.example.com无法访问(如无法连接到服务器或域的DNS请求失败),或者我得到4XX或5XX响应,那么来自该域的任何内容也将无法访问(例如http://www.example.com/some/path/to/a/resource/named/whatever.jpg)?302响应(比如说what.jpg)是否足以使第一个假设无效?我认为子域名应该被视为不同的http://subdomain.example.com和http://www.example.com可能不会指向同一个IP?
我似乎能够想到我提出的每个捷径的反例.我应该咬紧牙关并向每个URL发送GET请求吗?
.htaccess ×2
apache ×2
database ×2
http ×1
java ×1
mime-types ×1
mod-rewrite ×1
neo4j ×1
php ×1
url ×1